javascript – 在控制器中访问ng-repeat别名表达式

我在一个指令中有一个筛选列表:

<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在控制器中未定义.

如何将过滤后的数组传递给指令的控制器?

最佳答案 您可以通过在控制器中注入$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 – 工作实例

点赞