Angular $watch 如何识别 $scope.value 是如何变化的?

How an Angular $watch to indentity how the $scope.value changed?

我有一个变量手表。 $scope.value

我有两种可能性来更新我的值。

我需要确定更新是从我的手表发生的。

$scope.$watch('value',function(){
       //how to identify from were my actual change occured.   
 });

没有内置的、简单的或标准的方法可以做到这一点。

您可以:

  • 设置一个临时变量来指示更改源,例如

    var sourceOfChange;
    myService.doSomething().then(function() {
        sourceOfChange = 'myService';
        $scope.value = ...
    });
    $scope.$watch('value',function() {
        if( sourceOfChange === 'myService' ) {
            ...
        }
        ...
    });
    
  • 更新每个源的不同变量,观察这些变量并进行特定于源的处理,最后更新value,例如:

    // initialization
    $scope.value = ...
    $scope.valueFromInput = $scope.$value;
    $scope.valueFromService = $scope.$value;
    
    // watching the source-specific values
    $scope.$watch('valueFromInput', function(newval) {
        doInputSpecificProcessing(newval);
        $scope.value = newval;
    });
    
    // watch the value and do common processing
    $scope.$watch('value', doCommonProcessing);
    
  • 也可以有其他方式