EDITAR:
Ok, j'ai mis à jour l'exemple pour éviter le problème de la boucle, donc pour revenir à la question initiale, il recalcule toujours les objets du modèle B.
Dans cet exemple : 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;
}
}
dès que je modifie la valeur d'entrée dans le contrôleur A, il appelle b() qui se trouve dans un contrôleur totalement séparé. Pourquoi recalculerait-il les objets du modèle dans les autres contrôleurs ? Existe-t-il un moyen d'éviter cela ?
Si vous consultez le journal de la console, vous pouvez voir que B est imprimé chaque fois que vous tapez quelque chose dans le champ de saisie A, qui se trouve dans un contrôleur et une portée totalement distincts.
POUR RÉFÉRENCE, je conserve le code original de la question ici. Il a une erreur car il met à jour le modèle dans l'appel de fonction comme indiqué par certains des commentaires, cela est corrigé dans le code ci-dessus. L'erreur pourrait être déplacée dans une question séparée.
<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;
}
}