Ответ 1
Нет, нет способа сделать это с текущей реализацией.
$watch
запускаются функции с именем $apply
. Эта функция не знает, кто ее вызвал.
Вам понадобится другая перспектива, чтобы исправить вашу проблему.
Очень короткий вопрос: в 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
?
Нет, нет способа сделать это с текущей реализацией.
$watch
запускаются функции с именем $apply
. Эта функция не знает, кто ее вызвал.
Вам понадобится другая перспектива, чтобы исправить вашу проблему.
Нет, мы не можем знать, что вызывает его. Проверьте этот вопрос how-to-get-the-dom-element-that-triggered-ng-change, возможно, попытка написать специальную директиву для передачи дополнительной информации вашему контроллеру - это возможный способ получить триггер.