Изменение значения модели AngularJS в одном контроллере вызывает обновление модели в других
Хорошо, я обновляю пример, чтобы избежать проблемы зацикливания, поэтому вернемся к исходному вопросу: он пересчитает объекты модели B.
В этом примере:http://jsfiddle.net/qn2Wa/
<div ng-app>
<div ng-controller="A"><input ng-model="m">
{{a()}}
</div>
<div ng-controller="B"><input ng-model="m">
{{b()}}
</div>
</div>
JS
function A($scope) {
$scope.m='a';
var counter = 0;
$scope.a = function(){
console.log("A " + counter++);
return $scope.m;
}
}
function B($scope) {
$scope.m='b';
var counter = 0;
$scope.b = function(){
console.log("B " + counter++);
return $scope.m;
}
}
как только я изменю входное значение в контроллере A, он вызовет b (), который находится в совершенно отдельном контроллере. Почему он пересчитывает объекты модели в других контроллерах? Есть ли способ избежать этого?
Если вы видите консольный журнал, вы можете видеть, что B печатается каждый раз, когда вы вводите что-то в поле ввода A, которое находится в совершенно отдельном контроллере и области видимости.
ТОЛЬКО ДЛЯ ССЫЛКИ Я сохранил оригинальный код вопроса здесь. Он имеет ошибку, поскольку обновляет модель в вызове функции, как указано в некоторых комментариях, это исправлено в приведенном выше коде. Ошибка может быть перенесена в отдельный вопрос.
<div ng-app>
<div ng-controller="A"><input ng-model="m">
{{a()}} - {{counter}}
</div>
<div ng-controller="B"><input ng-model="m">
{{b()}} - {{counter}}
</div>
</div>
JS
function A($scope) {
$scope.m='a';
$scope.counter = 0;
$scope.a = function(){
$scope.counter++;
return $scope.m;
}
}
function B($scope) {
$scope.m='b';
$scope.counter = 0;
$scope.b = function(){
$scope.counter++;
return $scope.m;
}
}