ng-repeat过滤器键和数据

时间:2015-05-03 17:06:21

标签: javascript json angularjs

我无法使用ng-repeat迭代密钥和数据 我在这里有一个小提琴https://jsfiddle.net/prantikv/ddLpfmvh/2/

我有像这样的json数据:

    {
  "container1": {
      "value1": "data1",
      "value2": "data2",
      "value3": "data3",
      "value4": "data4",
      "value5":{
            "innerArray":
                  [{"innerValue1":"innerData1"},
                  {"innerValue1":"innerData2"}
                  ]
              }

   },
  "container2": {
      "value1": "data1",
      "value2": "data2",
      "value3": "data3",
      "value4": "data4",
      "value5":{
            "innerArray":
                  [{"innerValue1":"innerData1"},
                  {"innerValue1":"innerData2"}
                  ]
              }

   }

}

我的观点是这个

<input type="text" ng-model="searchInput" />
 <ul>
    <li data-ng-repeat="(key,value) in reports | filter:searchInput">
        {{ key }}</li>
</ul>

我想要实现的是我想要过滤键(container1,container2等)以及值(value1,value2等)

如何实现这一目标? 如果是这样我应该改变我的JSON,请告诉你。

1 个答案:

答案 0 :(得分:1)

使用非最佳的对象结构,可以使用ng-if并在控制器中创建一个函数来检查值

<li data-ng-repeat="(key,value) in reports " ng-if="hasSearch(value)" >

我并不是100%清楚你想要做什么,而且你的数据样本几乎是重复的,但看看如下:

$scope.hasSearch = function(obj){
    if(!$scope.searchInput){
        return true;
    }else{            
        for (key in obj){
            if(typeof obj[key] == 'string' && obj[key].indexOf( $scope.searchInput) >-1){
                return true
            }                
        }
        return false;
    }
}

更好地利用角度我会将您的结构转换为可以排序和过滤的数组,而对象不能

DEMO