2013-03-02 3 views
1

Я хотел бы использовать свой собственный фильтр с директивой ngRepeat. Вот что у меня естьAngularJS - настраиваемый фильтр с директивой ngRepeat

HTML:

<div ng-app="menuApp"> 
    <ul ng-controller="MenuCtrl"> 
     <li ng-repeat="item in menuItems | rootCategories"> 
      {{item.Name}} 
     </li> 
    </ul> 
</div> 

JS:

angular.module('menuApp', []) 
    .filter('rootCategories', function() { 
     return function(item) { 
      return item.Parent == 0; 
     }; 
    }); 

function MenuCtrl($scope) { 
    $scope.menuItems = [{ "Id": 1, "Name": "Sweep", "Parent": 0 }]; 

    /* 
    $scope.rootCategories = function(item) { 
     return item.Parent == 0; 
    }; 
    */ 
}; 

Я не хочу использовать закомментирована способ фильтровать элементы, потому что реальный фильтр будет сложнее, чем в приведенном примере. По некоторым причинам входной параметр «элемент» не определен, поэтому я ничего не вижу. Не могли бы вы рассказать мне, что не так? Спасибо.

+0

Я нашел следующий комментарий: «ИСПРАВЛЕНИЕ: пользовательский фильтр внутри нг-повтор проходит весь ассоциативный массив в качестве входных данных, а не ключ/значение каждого объекта или {{keyword.values}}, как я ранее неправильно понял. " Но не может изобрести умный способ применить его. – Antipod

+0

Я нашел следующую ссылку, которая помогла мне решить мою проблему: http://stackoverflow.com/questions/11753321/passing-arguments-to-angularjs-filters – Antipod

ответ

5

Пожалуйста, взгляните на эту скрипку. http://jsfiddle.net/bKFXy/. Здесь используется синтаксис передачи предикатного объекта в качестве выражения фильтра. item in menuItems | filter:{Parent:0}

Существует еще один метод для фильтрации и скрипка для этого здесь http://jsfiddle.net/kd5dv/

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

  • Нет связанных вопросов^_^