список фильтров с несколькими флажками в Angularjs

Я хотел бы отфильтровать список элементов ng-repeat с несколькими флажками категорий.

я прочитал это Фильтрация по нескольким флажкам в AngularJS и посмотрел видео Egghead, но у меня есть ошибка в простом цикле for, и я не понимаю:

ReferenceError: i is not defined 

вот плункер с кодом: http://plnkr.co/edit/p538ALfs00JTFQ6mKT9j

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


person François Romain    schedule 24.06.2013    source источник


Ответы (1)


Если вы собираетесь использовать строгий режим ('use strict';), вам необходимо объявить свои переменные. Ваш checkboxFilter использует много переменных, которые никогда не определены (включая i). Вы можете обойти свои первоначальные проблемы, изменив script.js: 22-23 на:

      var i,j,k,filter_cat,filter_value,filter_name,matchingItems = [];

После этого у тебя есть еще три проблемы...

  1. Строка 37. Этот код ищет свойство с именем filter_cat: items[i].filter_cat, тогда как вам нужно было найти имя свойства со значением filter_cat, так что вы хотите: items[i].[filter_cat].
  2. Ваши данные json имеют имена полей в нижнем регистре, а ваш код ищет в верхнем регистре (тип против типа)
  3. Ваши данные json имеют значения в нижнем регистре, а ваш код ищет в верхнем регистре (фрукты против фруктов)

Вот частичное редактирование, которое направит вас на правильный путь. Вам все равно нужно будет изменить свой json или сравнить нижний регистр (я частично изменил ваш json): http://plnkr.co/edit/d7p4QthXJg4ao34ATWla?p=preview

person Langdon    schedule 24.06.2013
comment
Спасибо ! я скопировал 'use strict'; из angular-seed, и теперь я понимаю, что он делает. Вы решили мою проблему. Теперь в моем коде все еще есть ошибка: TypeError: Cannot read property 'length' of undefined. но когда я console.log(prefs), массив возвращается. Есть идеи ? - person François Romain; 24.06.2013
comment
Да, вам нужно написать больше защитного кода. В основном оберните if (prefs) {} вокруг цикла for (j = 0.... Это из-за состояния гонки... вы используете ngResource и ссылаетесь на $scope.users в своем фильтре до того, как он загрузится. - person Langdon; 24.06.2013
comment
Ok. Я исправил все опечатки, и ошибки, которые вы указали. Большое спасибо. Он работает, когда загружается страница (обновляется плунжер). Как я могу изменить его каждый раз, когда я нажимаю флажок или когда я нажимаю кнопку? - person François Romain; 24.06.2013