AngularJs在Filter之后的数组中的第一个

dab*_*dab 16 javascript angularjs

在我的控制器中我可以打电话:

$scope.list[0];
Run Code Online (Sandbox Code Playgroud)

访问我的数组中的第一项.有没有办法做到这一点,记住过滤器.

例如,我有:

filter:search
Run Code Online (Sandbox Code Playgroud)

在我的重复,我怎么能调用$ scope.list [0]; 等于第一个搜索结果?

Dan*_*Dan 10

这可以通过将过滤器的依赖项注入控制器并在代码中调用它来完成

var filteredArray = filterDependency(arrayToFilter,args);
Run Code Online (Sandbox Code Playgroud)

它返回一个新的过滤数组.由于您使用的是"过滤器"过滤器(它是名为filter的过滤器),因此依赖注入应该是filterFilter.你的控制器应该是这样的:

var app = angular.module('myapp',[]);
app.controller('ctrlParent',function($scope,filterFilter){
    var filteredArray = [];
    $scope.list = ["abc","def","ghi","abcdefghi"];
    $scope.$watch('search',function(newValue){
       filteredArray = filterFilter($scope.list, newValue);
       // do something with the first result
       console.log(filteredArray[0]); // first result
    });    
});
Run Code Online (Sandbox Code Playgroud)

我们正在做的是在输入模型(search)上设置一个监视器,这样我们就可以获得新值并在输入改变时重新过滤数组.


另外:

如果您需要访问ng-repeat从视图中的索引,您可以使用特殊属性$index的内部ng-repeat,如:

<div ng-repeat="item in list | filter:search">
    {{$index}}
</div>
Run Code Online (Sandbox Code Playgroud)

您还可以使用$first,, $middle$last 此Angular文档中所示.

演示:这是一个小提琴