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

时间:2013-05-31 22:48:02

标签: javascript angularjs

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

$scope.list[0];

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

例如我有:

filter:search

重复一下,如何调用$ scope.list [0];等于第一个搜索结果?

3 个答案:

答案 0 :(得分:10)

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

var filteredArray = filterDependency(arrayToFilter,args);

返回一个新的过滤数组。由于您使用的是“过滤器”过滤器(它是名称为过滤器的过滤器),因此依赖注入应为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
    });    
});

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


同时

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

<div ng-repeat="item in list | filter:search">
    {{$index}}
</div>

您还可以使用$first$middle$last as shown in this Angular doc

演示Here is a fiddle

答案 1 :(得分:3)

不支持访问权限。如果您的ng-repeat有过滤器:

ng-repeat="thing in things | filter:search"

此处的已过滤列表有点匿名 - 它没有您可以访问的名称。

也就是说,如果您查看docs for ngRepeat,您会看到在每个转发器的范围内,您可以访问$index$first$middle ,和$last

类似

<body ng-app="App" ng-controller="Main">
    <pre ng-repeat="n in nums | filter:isOdd">
        n={{n}}:index={{$index}}:first={{$first}}:middle{{$middle}}:last={{$last}}
    </pre>
</body>

会屈服:

    n=1:index=0:first=true:middlefalse:last=false

    n=3:index=1:first=false:middletrue:last=false

    n=5:index=2:first=false:middlefalse:last=true

Fiddle

答案 2 :(得分:0)

您使用的是“ng-repeat”吗?如果是这样,请查看属性$ first,$ index,$ middle和$ last。这将允许您从重复中获取有关特定项目的信息。

有关详情,请点击此处:http://docs.angularjs.org/api/ng.directive:ngRepeat