在ng-repeat中使用深度对象的Angular过滤器
在ng-repeat中使用深度对象的Angular过滤器
我正在遵循这个问题来通过字段过滤ng-repeat
ng-repeat :filter by single field
然而我的情况不同,它实际上是主对象中对象值的一个字段。基本上我只想显示data.a == 1
以下代码在第一个列表中有效。第二个列表给我错误:
angular.module('myapp', []) .controller('mainCtrl', function ($scope) { $scope.items = [{ name: "John", data: { a: 1 } }, { name: "Lee", data: { a: 2 } }, { name: "Rue", data: { a: 3 } }, { name: "Peter", data: { a: 1 } }]; });
HTML
List 1
{{ item.name }}
List 2
{{ item.name }}
http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk
有没有办法做到这一点或者有没有更好的方法?
更新1
我尝试了angular.filter
filterBy,它也没有起作用。给我空数组。
http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk?p=preview
{{ item.name }}
更新2
我尝试了下面这个
{{ item.name }}
它似乎起作用了,但我需要精确匹配,不是子字符串匹配。我读过这个但是没有找到在视图中添加true
的方法AngularJS Filter Exact Match
有什么线索吗?
更新3(答案正确):
这个有效http://plnkr.co/edit/qJl6MtY6fOlVtD9Rv999?p=preview
基本上我在控制器中添加了这个
$scope.filteredItems = $filter('filter')($scope.items, {data :{a:1}}, true);
并在filteredItems
上做ng-repeat
。我没有看到在视图中直接传递true
参数的方法。
admin 更改状态以发布 2023年5月22日
如果你正在使用\可以升级到angular 1.3,那么你可以使用1.3 filters,这些过滤器更快速。特别是,你可以使用filterBy
参见: plunkr example
{{ item.name }}
否则,使用自定义函数。请查看我的答案: custom function