我已经获得了一个复杂的JSON对象来显示在Angular中,我想在钻入对象后将其过滤到两个列表中。
对象结构是:
{
foo:
{
bar:
{
showA: { value: true, type: 'A' },
showB: { value: false, type: 'A' },
showC: { value: true, type: 'A' }
}
}
}
我试图获得一个" false"和"真"。
在这种情况下:
禁用:
启用:
我无法过滤对象,也无法获得"键"对象,例如" SHOWA"
我尝试使用:
item in profile['foo']['bar'] | filter: { value: false }
访问正确的对象,但我无法过滤或获取"键"它的。
这是一个破碎的傻瓜来证明:
http://plnkr.co/edit/9NniQdo213AuEbf0pghA?p=preview
任何建议都会很棒!
答案 0 :(得分:2)
查看这个工作伙伴:http://plnkr.co/edit/TdM9P592OXd6Bx81Bmbt?p=preview
它使用自定义过滤器myFilter
,这使得过滤任务非常简单。 myFilter
返回一个新对象,其中只有对象的值等于作为过滤器的第二个参数给出的值。
app.filter('myFilter', function() {
return function(bar, value) {
var r = {};
for (var key in bar) {
if (bar[key].value == value) {
r[key] = bar[key];
}
}
return r;
}
});
要使用ng-repeat
获取密钥,请使用以下语法:
<li ng-repeat="(key, item) in profile['foo']['bar'] | myFilter:false">
<input type="checkbox" ng-model="item.value" /> {{ key }}
</li>
如果您可以更改$scope.profile
的结构,使用此结构可以更轻松地过滤任务:
bar: [
{name: 'ShowA', value: false, type: 'A'},
...
]