[英]Angular filter in ng-repeat with deep object
我正在按照这个问题过滤一个字段的ng-repeat
但是我的情况不同,它实际上是主对象的对象值中的一个字段。 基本上我只想显示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
<div ng-controller="mainCtrl">
<h1>List 1</h1>
<p ng-repeat="item in items">{{ item.name }}</p>
<h1>List 2</h1>
<p ng-repeat="item in items | filter: {data.a :1}">{{ item.name }}</p>
</div>
http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk
有关如何做到这一点的任何帮助还是有更好的方法?
更新1
我尝试了angular.filter
filterBy,它也没有用。 给我空白阵列。
http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk?p=preview
<p ng-repeat="item in items | filterBy: ['item.data.a'] :1">{{ item.name }}</p>
更新2
我试过这个
<p ng-repeat="item in items | filter: {data :{a:1}}">{{ item.name }}</p>
它似乎工作,但我需要完全匹配,而不是子串匹配。 我读过这个但似乎没有办法添加true
AngularJS过滤精确匹配
任何线索?
更新3(正确的答案):
这工作http://plnkr.co/edit/qJl6MtY6fOlVtD9Rv999?p=preview
基本上我把它添加到控制器
$scope.filteredItems = $filter('filter')($scope.items, {data :{a:1}}, true);
而是对filteredItems
进行ng-repeat
。 我没有看到直接在视图中传递true
参数的方法。
如果要访问内部属性,则需要使用对象表示法访问它:
<p ng-repeat="item in items | filter: {data :{a:1}}">{{ item.name }}</p>
检查这个plunker 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.