Подтвердить что ты не робот

Angular: получить причину появления $watch

Очень короткий вопрос: в Angular есть ли какой-либо способ получить "первопричину" $watch для запуска?

Скажем, у вас есть следующий код JavaScript:

$scope.$watch("foo", function(value){
    // here I'd like to know if the change is triggered 
    // due to change in ngModel or through ngClick
};

$scope.changeFoo = function(){
    $scope.foo = "bar"
};

И это HTML:

<input ng-model="foo">
<button ng-click="changeFoo()">Change Foo > Bar</button>

В моем $watch я хотел бы знать, что вызвало его увольнение. В этом случае это было изменение в ngModel или было изменено мое значение в функции ngClick?

4b9b3361

Ответ 1

Нет, нет способа сделать это с текущей реализацией.

$watch запускаются функции с именем $apply. Эта функция не знает, кто ее вызвал.

Вам понадобится другая перспектива, чтобы исправить вашу проблему.

Ответ 2

Нет, мы не можем знать, что вызывает его. Проверьте этот вопрос how-to-get-the-dom-element-that-triggered-ng-change, возможно, попытка написать специальную директиву для передачи дополнительной информации вашему контроллеру - это возможный способ получить триггер.