Angular 在 ng-repeat 中过滤深度对象
Angular filter in ng-repeat with deep object
我正在关注这个问题以按字段过滤 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
<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 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
参数的方法。
如果你正在使用\可以升级到angular1.3,那么你可以使用这个:1.3 filters These are faster. In particular, you can use filterBy
<p ng-repeat="item in items | filterBy: ['data.a'] :1">{{ item.name }}</p>
否则,使用自定义函数。在这里查看我的回答:
如果你想访问内部 属性 你需要使用对象符号来访问它:
<p ng-repeat="item in items | filter: {data :{a:1}}">{{ item.name }}</p>
勾选这个plunker。
我正在关注这个问题以按字段过滤 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
<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 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
参数的方法。
如果你正在使用\可以升级到angular1.3,那么你可以使用这个:1.3 filters These are faster. In particular, you can use filterBy
<p ng-repeat="item in items | filterBy: ['data.a'] :1">{{ item.name }}</p>
否则,使用自定义函数。在这里查看我的回答:
如果你想访问内部 属性 你需要使用对象符号来访问它:
<p ng-repeat="item in items | filter: {data :{a:1}}">{{ item.name }}</p>
勾选这个plunker。