2014-02-05 4 views
1

То, что я пытаюсь сделать:

Im используя нг повтора директиву о ассоциативном массиве, который я хочу, чтобы отфильтровать. Встроенный угловой фильтр не работает с ассоциативными массивами/хэшами. Из-за этого я пытаюсь написать свой собственный фильтр (вдохновленный http://angularjs.de/artikel/angularjs-ng-repeat, он находится на немецком языке, но важный код ниже заголовка «Beispiel 2: Filtern von Hashes mittels eigenem Filter», что означает «Пример 2: Хранение фильтров с помощью ваш собственный фильтр ").

НГ-повтор:

tr ng-repeat="(key, machine) in machines | customFilter | orderObjectBy:'name':false" 

примечание: orderObjectBy также customFilter.

Фильтр:

toolApp.filter('customFilter', [function(){ 
    return function(machines){ 
     var result = {}; 

     angular.forEach(machines, function(machine, key){ 
      /*if(machine.name.contains(filter)){ 
       result[key] = machine; 
      }*/ 
      //if(machine.name.contains("a")){ 
       result[key] = machine; 
      //} 
     }); 
     return result; 
    }; 
}]); 

Фильтр работает с закодированного "фильтр-критериум". Но я хочу иметь текстовое поле над списком, в котором пользователь может ввести «фильтр-критерий». Моя проблема заключается в том, что я не знаю, как вставить это значение в фильтр. Я не очень много знаю в Интернете, и то, что я нашел, не работает для меня.

У кого-нибудь есть идея, как вставить значение другого, возможно, другого подхода.

Огромное спасибо за каждый ответ! Если вам нужна дополнительная информация, дайте мне знать! Я попытался удержать его:>.

Привет из Германии

ответ

6

вы можете иметь параметры для пользовательского фильтра.

Предположим, у вас есть поле ввода:

<input ng-model="myParam"> 

и нг-повтор, как у вас:

<tr ng-repeat="(key, machine) in machines | customFilter:myParam | orderObjectBy:'name':false" > 

, то вы можете получить доступ этот параметр в пользовательском фильтре:

toolApp.filter('customFilter', [function(){ 
    return function(machines, myParam){ 
     var result = {}; 

     angular.forEach(machines, function(machine, key){ 
      if(machine.name.contains(myParam)){ 
       result[key] = machine; 
      } 
     }); 
     return result; 
    }; 
}]); 

note: Обратите внимание, что значение myParam инициализируется с помощью "неопределенного" стоимость. Вы должны установить значение по умолчанию в контроллере или обрабатывать его в customFilter. В противном случае вы увидите свой список только после того, как начнете вводить текст.

+0

Огромное спасибо за ваш ответ! :) Отлично работает – zois

+0

Отличный ответ, решил мою проблему –

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