Я пытаюсь создать фильтр на основе кнопок, но как только я присоединяю фильтр к 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>
Разработчики 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>
Поскольку 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?