2013-06-04 5 views
1

я есть, как этотAngularJS фильтр с несколькими завивки

[{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 и идентификатор типа так, например, идентификатор 3 является дочерним идентификатором 1 и я пытаясь показать им нравится это

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

спасибо за помощь

+0

я попробовал пользовательские фильтры, как показано в моих jsfiddle ссылка –

ответ

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.

Но в вашем случае вы можете использовать стандартный фильтр «фильтр» и передать ему объекты, которые будут делать то, что вы хотите.

Кроме того, проклинайте вас Угловые разработчики для создания абстракции, называемой фильтром, а затем создаем фильтр-фильтр. Я имею в виду, как это странно?

+1

возгласами, это поломка неодновременности ... http://en.wikipedia.org/wiki/Relativity_of_simultaneity – rewritten

0

Неправильный способ использования фильтров. Если вы проверите документацию, у вас есть три варианта:

  1. использовать строку. Он будет глубоко исследован в объекте. Любой объект с некоторым глубоким значением, содержащим строку, будет соответствовать
  2. используйте функцию. Он будет вызываться для элементов массива. Вы должны указать любой параметр в области функции, а не как параметр для фильтра.
  3. использование предмета. Он будет работать как совпадение строк, но для конкретных свойств.

Если вы используете третий случай

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

и, кроме того напечатать имя ребенка

{{ child.name }} 

тогда вы увидите правильные результаты.

http://jsfiddle.net/waAc7/

Смежные вопросы