2014-09-06 88 views
3

我有我试图过滤以下虚构的对象:过滤收集由孩子

{ 
    "0":{ 
     "boy":{ 
      "age":"32", 
      "name":"Daniel Grey" 
     } 
    }, 
    "1":{ 
     "boy":{ 
      "age":"23", 
      "name":"John Doe" 
     } 
    } 
} 

,然后纳克重复指令如下:

<ul> 
    <li ng-repeat="person in people">{{person.boy.name}}<li> 
</ul> 

我的问题是,如何通过“名称”过滤人员?我已经试过:

<input type="text" ng-model="name"> 
<ul> 
    <li ng-repeat="person in people | filter:name">{{person.boy.name}}<li> 
</ul> 

...但没有任何反应[NG-模式似乎从视图中断开! ]。

任何反应非常感谢!

谢谢!

+0

看起来很好http:// jsfiddle。net/arunpjohny/7cnocmpr/1/ – 2014-09-06 02:43:11

+1

'people'不是一个有效的JSON对象btw – Dalorzo 2014-09-06 02:53:40

回答

1

更新的答案,每个操作的更新

看着你fiddle,你$scope.people本质上是一个大的JSON对象的数组,其中多个嵌套boy对象。这很难合作。如果你有过JSON对象的构造控制,我会建议转换成多个JSON对象的数组,这可能看起来像:

$scope.people = [ 
    { 
     "name":"Daniel Grey", 
     "age":"32", 
     "gender": "male" 
    }, 
    { 
     "name":"John Doe", 
     "age":"23", 
     "gender": "male" 
    } 
]; 

注意我是如何转换的boy钥匙插入gender属性。

如果您确实无法控制数据结构,则可能需要提供一个自定义过滤器来解析嵌套结构。

看一下这个fiddle。有几件事情要注意:

  1. 我在ng-repeat指定people[0]检索您的阵列中的一个大JSON对象。
  2. 定制nameFilter只搜索.boy.name属性。

原来的答案

如果您只是名想让你的过滤器,您必须指定在ng-model指令的特定属性。所以你的情况,这将是

<input type="text" ng-model="search.boy.name"> 
<ul> 
    <li ng-repeat="person in people | filter:search">{{person.boy.name}}<li> 
</ul> 

但首先你需要修复您的JSON对象。

UPDATE:

fiddle现场演示。我注意到仅使用名称搜索过滤器不适用于angularjs 1.2.1,但适用于angularjs 1.2.2。

+0

我已经更新了我的应用程序中实际结构的JSON对象。问题仍然存在:我如何过滤“名称”​​? – 2014-09-06 08:29:16

+0

@AlexandruPopovici我在回答中添加了小提琴。请试一试。 – 2014-09-06 09:22:57

+0

非常感谢你的努力来帮助我。你非常友善,我很感激。我已经看到你的小提琴,事实上,它的工作。但是,再看看我的JSON对象,这有点不同。我已经用新结构更新了第一篇文章,您可以在这里看到:http://jsfiddle.net/apwwy84s/2/。还有一个附注:我正在使用angularjs v.1.3 – 2014-09-06 14:15:39