按孩子过滤收集

时间:2014-09-06 02:30:30

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

我有以下虚构对象,我正在尝试过滤:

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

然后,ng-repeat指令看起来像这样:

<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-model似乎与视图断开连接! ]

非常感谢任何回复!

谢谢!

1 个答案:

答案 0 :(得分:1)

根据OP的更新更新了答案

查看您的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. 我必须在people[0]中指定ng-repeat来检索数组中的一个大JSON对象。
  2. 自定义nameFilter仅搜索.boy.name属性。
  3. 原始答案

    如果您希望按 名称进行过滤,则必须在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对象。

    更新:

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