Обновление переменной $ scope из ngRepeat

У меня есть цикл ngRepeat в представлении, и для каждого элемента у меня есть настраиваемый элемент управления переключением, связанный с переменной вида $scope следующим образом:

Toggle!

При щелчке ссылки переменная isO n переключается, как ожидалось, но только для элемента, который был нажат. Я ожидал бы, что все элементы будут обновлены, поскольку isOn определено в контроллере как $scope.isOn = false

Когда я переключаю переменную с помощью метода контроллера, все элементы обновляются!

Toggle!


--- controller ---

$scope.toggle = function() {
 $scope.isOn = !$scope.isOn;
}

Можете ли вы объяснить это поведение? Это потому, что ngRepeat создает отдельную область для каждого элемента?

1 ответ

Да, ngRepeat создает отдельную область для каждого элемента. См. AngularJS ngRepeat

Директива ngRepeat создает экземпляр шаблона один раз за элемент из коллекции. Каждый экземпляр шаблона получает свою собственную область...

Изменить: из комментария @doodeec

Вместо этого вы можете переключать родительскую область. ng-click="$parent.isOn = !$parent.isOn"

licensed under cc by-sa 3.0 with attribution.