AngularJS过滤器有多个烫发器

时间:2013-06-04 20:25:12

标签: angularjs angularjs-ng-repeat

我有这样的用户

[{id:1,name:'name',parent_id:0,type:1},
{id:2,name:'name2',parent_id:0,type:2},
{id:3,name:"name1 child",parent_id:1,type:1}]

我试图根据parent_id和type id显示父母和子女用户,所以例如id 3是id 1的孩子,我试图像这样显示他们

http://jsfiddle.net/U3pVM/689/

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我修理了你的小提琴:

http://jsfiddle.net/eQP8S/

 <div ng-controller="MyCtrl">
    <ol>
    <li ng-repeat="user in users | filter:{parent_id:0}">
         {{user.name}}
        <ol>
               <li ng-repeat="child in users | filter:{parent_id:user.id, type:user.type}">
                   {{child.name}}
               </li>
        </ol>
    </li>
   </ol>
</div>

你的主要问题是你试图使用带有函数的“过滤器”过滤器,这没关系,但是该函数不允许带任何参数。如果您确实需要创建一个带参数的过滤器,则必须编写自定义过滤器:http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filters

但是在你的情况下,你可以使用标准的“过滤器”过滤器并传递它可以做你想要的对象。

另外,诅咒Angular开发人员创建一个名为filter的抽象,然后创建一个“过滤器”过滤器。我的意思是,这有多令人困惑?

答案 1 :(得分:0)

这不是使用过滤器的正确方法。如果您查看文档,则有三个选项:

  1. 使用字符串。它将在对象中深入搜索。任何包含字符串的深度值的对象都将匹配
  2. 使用功能。它将被调用为数组的元素。您应该在函数范围内提供任何参数,而不是过滤器的参数。
  3. 使用对象。它将像字符串匹配一样工作,但对于特定属性。
  4. 如果您使用第三种情况

    <li ng-repeat="child in users | filter:{parent_id: user.id, type: user.type}">
    

    并打印孩子的姓名

    {{ child.name }}
    

    然后你会看到正确的结果。

    http://jsfiddle.net/waAc7/