Angular:获取触发$ watch的原因

时间:2014-05-19 10:03:22

标签: javascript angularjs angularjs-scope

一个非常简短的问题:在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函数中我的值发生了变化?

2 个答案:

答案 0 :(得分:6)

不,当前的实现无法做到这一点。

触发

$watch运行名为$apply的函数。该功能不知道是谁触发了它。

您将需要另一个视角来解决您的问题。

答案 1 :(得分:1)

不,我们无法知道触发它的是什么。检查此问题how-to-get-the-dom-element-that-triggered-ng-change,可能尝试编写自定义指令以将更多信息传递给控制器​​,这是获取触发器的可能方法。