2015-09-14 88 views
2

我正在尝试使用对象数组进行过滤。但我没有按照我的要求得到答案。如何从主要对象值过滤对象数组

对象我循环但有3个步骤的数组。我试图过滤它们并在li元素中显示,但无法正常工作。只有第一步对我有效。

数组为:“姓名,子项目and Contracts`(所有嵌套在主对象的内部)

这里是我的尝试:

<div class="section filter1"> 
    <ul> 
    <li ng-repeat="value in values"> {{value.Name}}</li> 
    </ul> 
</div> 
<div class="section filter2"> 
    <ul> 
    <li ng-repeat="value in values | SubProjects"> {{$index}}</li> 
    </ul> 
</div> 
<div class="section filter3"> 
    <ul> 
    <li ng-repeat="value in values | SubProjects | Contracts"> {{value.Name}}</li> 
    </ul> 
</div> 

对象样本:

{ 
    "Id": "1", 
    "Name": "Khalifa International Stadium", 
    "SubProjects": [ 
     { 
     "Contracts": [ 
      { 
      "CompletedPercentage": 0, 
      "Id": "583", 
      "Name": "LP/C21/145", 
      "Phase": null 
      }, 
      { 
      "CompletedPercentage": 0, 
      "Id": "529", 
      "Name": "KP/B21/134", 
      "Phase": null 
      }, 
      { 
      "CompletedPercentage": 0, 
      "Id": "575", 
      "Name": "LP/C21/142", 
      "Phase": null 
      } 
     ], 
     "Id": "2", 
     "Name": "Energy Center" 
     }, 

Live Demo

+1

不知道你所说的“价值观价值|子项目”的意思是过滤器语法是不同的,反正检查这两个来源https://docs.angularjs.org/api/ng/filter/filter和https: //www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=angularjs%20filter%20nested%20array –

+0

我想从使用过滤器的嵌套数组中检索对象,这是不可能的? – 3gwebtrain

+0

一切皆有可能!检查相同问题的例子,尝试一些事情,至少过滤主要数组。用问题创建jsFiddle,然后有人可以帮助你。 –

回答

1

您需要根据您的要求在这里构建自定义过滤器。请参阅this示例,并让我知道您是否面临与您的案例有关的任何问题。有关文件,请拨打check。采用相同方法的更多simple示例。

<input type="text" ng-model="search"> 
    <ul ng-repeat="oneauth in authorisations[0]"> 
     <li ng-repeat="entry in oneauth | nameFilter:search">  
    {{entry.auth.name}}</li> 
    </ul> 


    app.filter('nameFilter', function(){ 
    return function(objects, criteria){ 
     var filterResult = new Array(); 
      if(!criteria) 
      return objects; 

     for(index in objects) { 
      if(objects[index].auth.name.indexOf(criteria) != -1) // filter by name only 
       filterResult.push(objects[index]); 
      } 
      console.log(filterResult); 

     return filterResult; 
    }  
});