Почему фильтр не работает, когда внутри другого ng-repeat

0

Я пытаюсь создать фильтр на основе кнопок, но как только я присоединяю фильтр к ng-repeat, он больше не работает (ПРИМЕЧАНИЕ, объекты, которые нужно фильтровать, находятся в другом ng-повторе).

<!-- This works -->
<div ng-click="myFilter = {name: 'Test'}">button</div>

<!-- This does not work -->
<span ng-repeat="(key, button) in gl_categories">
    <div ng-click="myFilter = {name: 'Test'}">{{button}}</div>
</span>
Теги:

2 ответа

1
Лучший ответ

Разработчики AngularJS рекомендуют не писать код на шаблонах. Шаблоны должны использоваться как только для чтения.

В вашем случае проблема заключается в том, что ng-repeat создает новую область для каждой итерации. Вы пишете в области итераций.

Попробуйте использовать функцию вместо ручной настройки.

$scope.setFilter = function(value){
  $scope.myFilter = {name: value}
}

позже

<span ng-repeat="(key, button) in gl_categories">
    <div ng-click="setFilter('test')">{{button}}</div>
</span>
0

Поскольку ngRepeat создает свою собственную ngRepeat область, и каждый раз, когда происходит событие щелчка, в этой области myFilter другая переменная myFilter. Вы можете использовать объект, затем установить свойство объекта (это будет пузыриться)

<div ng-click="x.myFilter = {name: 'Test'}">button</div>

<span ng-repeat="(key, button) in gl_categories">
    <div ng-click="x.myFilter = {name: 'Test'}">{{button}}</div>
</span>

Я бы рекомендовал прочитать следующую статью для удивительного объяснения: каковы нюансы объема прототипа/прототипного наследования в AngularJS?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню