AngularJS:过滤JSON对象而不是数组

4
由于AngularJS提供的过滤器仅适用于数组而不适用于对象,因此我正在使用此解决方案中建议的过滤函数。现在我想扩展它,因为我的JSON数据还有一个存储过滤可见性数据的设置对象(不幸的是我不能修改JSON结构):
$scope.data = {
      "groups":{
        "1": {
          "type": "foo",
          "name": "blah", 
          "settings": {
            "visibility":[true]
          }
        },
        "2": {
          "type": "bar", 
          "settings": {
            "visibility":[false]
          }
        }
      }
}

因此,我的过滤器调用也更加复杂,但当然目前不能与过滤器一起使用。
<div ng-repeat="(key, value) in data.groups | objectByKeyValFilter:'settings.visible[0]':true>
    {{key}} {{value.type}}
</div>

很可能

objectByKeyValFilter:'settings.visibility[0]' : true

成为错误的东西就像这样。
myObject['settings.visibility[0]']

如何修改筛选功能以实现筛选?

不起作用的 Plunker: http://plnkr.co/edit/f202lA?p=preview

2个回答

0

如果采用稍微不同的方法,会怎样呢:plnkr

 <div ng-repeat="(key, value) in data.groups ">
       <span ng-show="value.settings.visible">
        {{key}} {{value.type}}
        <span>


      </div> 

谢谢,对于可见性的设置,您的方法是有效的 - 但是一旦我存储真正复杂的设置(例如模板数据或元数据),这个解决方案就不再适用了... - Johannes Scherg

0

好的,让我们来看一下这里 http://plnkr.co/edit/MgltNXw0x2KWcmWm6QeA?p=preview

<div ng-controller ="test">
      <div ng-repeat="(key, value) in data.groups | objectByKeyValFilter:'settings.visible':'true'">
        {{key}} {{value.type}}
      </div> 
    </div> 

真或假必须放在引号内

JS:

angular.module('app').filter('objectByKeyValFilter', function() {
  return function(input, filterKey, filterVal) {


    var filteredInput = [];
    angular.forEach(input, function(value, key) {

      if (value.settings.visible == filterVal) {


        filteredInput.push(value);
      }

    });

    return filteredInput;
  }
});

是啊...!如果(value.settings.visible == filterVal)可以适用于每个键而不仅仅是可见或不可见,那就太棒了... - Johannes Scherg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接