我在我的html文件中使用ng-repeat来显示过滤的项目:
<li ng-repeat="item in (filteredItems = (items | filter:query))"> {{ item.name }} </a>
精度:我想在过滤列表中获取索引,而不是在整个列表中.
例如,这将是项目名称为some_item_7的索引.
var app = angular.module('myApp',[]); app.controller('MyCtrl',['$scope',function MyCtrl($scope) { $scope.query = 'some'; $scope.items = [ { name: 'some_item_1' },{ name: 'another_item_2' },{ name: 'some_item_3' },{ name: 'another_item_4' },{ name: 'some_item_5' },{ name: 'another_item_6' },{ name: 'some_item_7' },{ name: 'another_item_8' },{ name: 'some_item_9' } ]; $scope.itemNext = function (item) { console.log(item.name); }; $scope.getIndexFromName = function (name) { console.log("trying to get the index of the item with name = " + name); } $scope.getIndexFromName('some_item_7'); } ]);
http://plnkr.co/edit/C8gL9qV1MyonTwDENO9L?p=preview
任何的想法 ?
解决方法
ng-repeat表达式在作用域上创建filteredList数组.
< li ng-repeat =“item in(filteredItems =(items | filter:query))”>
< li ng-repeat =“item in(filteredItems =(items | filter:query))”>
您可以像任何数组一样遍历它,检查与name参数匹配的项目.
$scope.filteredItems
这是一个演示:http://plnkr.co/69nnbaZaulgX0odG7g7Y
见这篇相关文章:AngularJS – how to get an ngRepeat filtered result reference
更新
您的注释表明您不想等待ng-repeat来创建过滤项目数组.您可以使用$filter服务在页面加载之前轻松初始化相同的阵列.使用:
$scope.filteredItems = $filter('filter')($scope.items,{name: $scope.query},false)
这样做不会干扰ng-repeat在DOM创建期间将其过滤结果保存到相同的filteredItems数组.
这是更新的(和交互式的)demo:http://plnkr.co/NSvBz1yWvmeFgXITutZF