Изменение значения модели 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, которое находится в совершенно отдельном контроллере и области видимости.

ТОЛЬКО ДЛЯ ССЫЛКИ Я сохранил оригинальный код вопроса здесь. Он имеет ошибку, поскольку обновляет модель в вызове функции, как указано в некоторых комментариях, это исправлено в приведенном выше коде. Ошибка может быть перенесена в отдельный вопрос.

http://jsfiddle.net/m8xtA/

<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;
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос