在我的控制器中我可以打电话:
$scope.list[0];
访问我的数组中的第一项。有没有办法做到这一点,记住过滤器。
例如我有:
filter:search
重复一下,如何调用$ scope.list [0];等于第一个搜索结果?
答案 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。
答案 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
答案 2 :(得分:0)
您使用的是“ng-repeat”吗?如果是这样,请查看属性$ first,$ index,$ middle和$ last。这将允许您从重复中获取有关特定项目的信息。
有关详情,请点击此处:http://docs.angularjs.org/api/ng.directive:ngRepeat