2017-06-30 4 views
0

Je souhaite modifier l'ordre de quelques objets, que je filtrer déjà par une clé du même objet, donc ..OrderBy pas frais en cas de changement de la valeur de la clé

je fais la chose ..

/** 
    * Direction 
    * @param blockIndex 
    * @param direction 
    */ 
    $scope.moveBlock = function(blockIndex,direction){ 
     var block = $scope.data.blocks[blockIndex]; 

     if(direction === 'up'){ 
      var newOrder = $scope.data.blocks[blockIndex-1]; 
      if(newOrder){ 
       newOrder.order = newOrder.order + 1; 
       block.order = block.order - 1; 
      } 
      return; 
     } 

     if(direction === 'down'){ 
      var newOrder = $scope.data.blocks[blockIndex+1]; 
      if(newOrder){ 
       newOrder.order = newOrder.order - 1; 
       block.order = block.order + 1; 
      } 
     } 
    }; 

et html ..

<div class="block__wrapper" ng-repeat="(blockIndex, block) in data.blocks | toArray:false | orderBy: 'block.order' : false">{{block.order}}</div> 

mais ne marche pas le travail, le changement de valeur de la commande, mais il semble que le filtre orderBy pas rafraîchir ou écouter cette valeur ..

Des idées?

Répondre

0

je résoudre ce problème, modifier le contenu de chaque index d'objet ...

Comme ceci:

/** 
    * Direction 
    * @param blockIndex 
    * @param direction 
    */ 
    $scope.moveBlock = function(blockIndex,direction){ 

     var block = {}; 
     var upBlock = {}; 

     if(direction === 'up'){ 
      var nextIndex = blockIndex-1; 
      if($scope.data.blocks[nextIndex]){ 
       angular.copy($scope.data.blocks[blockIndex],block); 
       angular.copy($scope.data.blocks[nextIndex],upBlock); 
       $scope.data.blocks[nextIndex] = block; 
       $scope.data.blocks[nextIndex].order = $scope.data.blocks[nextIndex].order - 1; 
       $scope.data.blocks[blockIndex] = upBlock; 
       $scope.data.blocks[blockIndex].order = $scope.data.blocks[blockIndex].order + 1; 
      } 
      return; 
     } 

     if(direction === 'down'){ 
      var nextIndex = blockIndex+1; 
      if($scope.data.blocks[nextIndex]){ 
       angular.copy($scope.data.blocks[blockIndex],block); 
       angular.copy($scope.data.blocks[nextIndex],upBlock); 
       $scope.data.blocks[nextIndex] = block; 
       $scope.data.blocks[nextIndex].order = $scope.data.blocks[nextIndex].order + 1; 
       $scope.data.blocks[blockIndex] = upBlock; 
       $scope.data.blocks[blockIndex].order = $scope.data.blocks[blockIndex].order - 1; 
      } 
     } 
    };