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>
有沒有辦法告訴過濾器,一個新的項目已被添加到陣列?重新加載頁面後,一切工作正常,因爲過濾器獲取整個項目數組。
請顯示控制器。如何定義'項目'? –
如果你提供一個工作[plunkr](http://plnkr.co/),這將有所幫助。 – chris
刪除'$ scope。$ apply(function()',只需按下, – dfsq