2015-07-21 27 views
1

我的自定義篩選器函數的角度有問題。ng-repeat中的AngularJS自定義篩選器未獲取推送對象

這是過濾功能:

.filter('itemFilter', function($rootScope) { 

     return function(input) { 
      var filtered = []; 
      angular.forEach(input, function(item) { 
       if(item.user_id === $rootScope.userData._id && item.active === true){ 
        filtered.push(item); 
       } 
      }); 
      //console.log(filtered); 
      return filtered; 
     } 

    }); 

過濾器做它應該做的,但是當我想在該項目陣推一個新的對象,過濾器沒有得到新的對象。不過,新項目正確地被推入陣列中。

這是項目在數據庫和rootScope中的推送位置。該功能位於工廠內部並在控制器中調用。

功能在工廠:

var addItem = function(item){ 
      $http.post("http://localhost:3333/items", item) 
       .success(function (response) { 
        $rootScope.items.push(item); 
        $log.debug(response); 
       }) 
       .error(function (err){ 
        $log.error("item was not added: "+err); 
       }); 
     }; 

在控制器內的功能的呼叫:

$scope.itemObj = {"user_id": $rootScope.userData._id, "group_id": $rootScope.userData.group_id}; 

    $scope.addItem = function() { 
     console.log($scope.itemObj); 
     dataFactory.addItem($scope.itemObj); 
     $modalInstance.close(); 
     $scope.itemObj = {"user_id": $rootScope.userData._id, "group_id": $rootScope.userData.group_id}; 
    }; 

整個陣列的所有項目位於rootScope。

這是一部分,我叫NG-重複:

<tbody ng-repeat="item in items | itemFilter | filter: qry | orderBy: '-created'"> 
    <tr popover="{{item.description}}" popover-trigger="mouseenter"> 
     <td>{{item.amount}}</td> 
     <td>{{item.name}}</td> 
     <td>{{item.price | currency:"EUR€ "}}</td> 
     <td>{{item.list}}</td> 
     <td ng-controller="EditItemCtrl"><a class="btn btn-default" ng-click="open(item)">Edit</a></td> 
     <td><a class="btn btn-danger" ng-click="deleteItem(item)">Delete</a></td> 
     <td ng-controller="BoughtItemCtrl"> 
      <a class="btn btn-success" ng-click="open(item)">Bought</a> 
     </td> 
     <td> 
      <p ng-show="!item.active">NO</p> 
      <p ng-show="item.active">YES</p> 
     </td> 
    </tr></tbody> 

有沒有辦法告訴過濾器,一個新的項目已被添加到陣列?重新加載頁面後,一切工作正常,因爲過濾器獲取整個項目數組。

+0

請顯示控制器。如何定義'項目'? –

+0

如果你提供一個工作[plunkr](http://plnkr.co/),這將有所幫助。 – chris

+0

刪除'$ scope。$ apply(function()',只需按下, – dfsq

回答

0

我想我解決了這個問題。

而不是將'item'推入數組中,我現在正在將'響應'推入它。

var addItem = function(item){ 
     $http.post("http://localhost:3333/items", item) 
      .success(function (response) { 
       $rootScope.items.push(response); 
       $log.debug(response); 
      }) 
      .error(function (err){ 
       $log.error("item was not added: "+err); 
      }); 
    }; 

推送的響應有一個現在的'_id'值(它由MonogDB生成)。我不確定是否缺少身份證是問題所在。

也許你有一個答案。 無論如何感謝您的快速回復。

相關問題