我在指令中有一个过滤列表:
<div ng-repeat="item in items | filter:filter | limitTo:5 as filteredItems">
<div ng-bind="item.title"></div>
</div>
<div><span ng-bind="filteredItems.length"></span> items</div>
我希望访问和操作指令控制器中的过滤列表。但是scope.filteredItems
在控制器中是undefined
。
如何将过滤后的数组传递给指令的控制器?
答案 0 :(得分:2)
您可以通过将$filter
注入您的控制器并利用以下内容来锁定已过滤的数组,并定位filter
的自定义过滤器
$scope.filteredItems = $filter('filter')($scope.items)
这将包含应用filter
和limitTo
过滤器的新阵列。观察简单的例子来演示这个
<span ng-bind="filteredItems.length"></span><!-- 2 -->
<div class="item" ng-repeat="item in items | filter | limitTo: 2 as filteredItems"></div>
app.filter('filter', function() {
return function(input) {
return input.slice(0, 4); // 4 items - initial filter
};
})
app.controller('ctrl', ['$scope', '$filter', function($scope, $filter) {
$scope.items = [
{'key': 'A', 'value': 0},
{'key': 'B', 'value': 1},
{'key': 'C', 'value': 2},
{'key': 'D', 'value': 3},
{'key': 'E', 'value': 4},
{'key': 'F', 'value': 5},
{'key': 'G', 'value': 6},
{'key': 'H', 'value': 7}
];
$scope.filteredItems = $filter('filter')($scope.items) // 2 items - compound filter
}]);
JSFiddle Link - 工作示例