Angularjs过滤嵌套属性

时间:2014-07-30 07:56:53

标签: angularjs angularjs-ng-repeat angularjs-filter

我有一个以下json对象的数组:

 { 
    fooBar:{ 
        Id: 2
        Foo:  { 
                Id: 4
                IsNew: false
              } 
         Bar: { 
                Id: 1
                IsNew: false
              }
           }
  }

我希望对fooBar.Foo.Id进行过滤,因此基于this answer我希望以下内容能够正常运行:

<div data-ng-repeat="fooBar in fooBars | filter:{Foo:{Id : 4}}:true">

但这并没有给我任何回报。

我可以执行以下操作来过滤fooBar.Id并且工作正常:

<div data-ng-repeat="fooBar in fooBars | filter:{Id : 2}:true">

我是否应该为这种级别的子属性匹配编写自定义过滤器?或者有什么明显的我做错了吗?

1 个答案:

答案 0 :(得分:0)

基于this answer,我通过创建自定义过滤器来解决问题:

app.filter('fooBarFilter', [function () {
 return function (foobars, fooId) {
     var result = {};

     angular.forEach(foobars, function (foobar, key) {
         if (foobar.foo.Id === fooId) {
             result[key] = foobar;
         }
     });
     return result;
 };
}]);

并用它来过滤HTML中的集合:

 <div data-ng-repeat="(key, fooBar) in fooBars | fooBarFilter : 4">