AngularJS:$watch的执行顺序是什么?

AngularJS:$watch的执行顺序是什么?,angularjs,Angularjs,我有一个手表功能: scope.$watch('target', function(){ scope.hasUnsavedChanges = true; }, true); 然后我更改一些值: functiion change(target){ scope.hasUnsavedChanges = false; scope.target.Xxx = ''; console.log('scope.hasUnsavedChanges = ' + scope.hasUnsave

我有一个手表功能:

scope.$watch('target', function(){
   scope.hasUnsavedChanges = true;
}, true);
然后我更改一些值:

functiion change(target){
   scope.hasUnsavedChanges = false;
   scope.target.Xxx = '';
   console.log('scope.hasUnsavedChanges = ' + scope.hasUnsavedChanges); 
}
它输出false。那么什么时候执行watch函数呢?
在上面的代码中,scope.hasUnsavedChanges变为true之后,如何运行一些代码?

$watch
函数在每次调用
$scope.$digests()
函数后执行

如果您想在变量(如
hasUnsavedChanges
变为true)后执行代码。将其改为函数并在其中执行所有代码不是更有意义吗

scope.setUnsavedChanges = function(){  
  scope.hasUnsavedChanges = true; 
  //the rest of your code goes here
}

scope.$watch('target', function(){
   scope.setUnsavedChanges();
}, true);

为了澄清OP的问题,由于
$watch
ers在摘要期间触发,因此在任何情况下,这都不会紧跟在所观察表达式的结果差异之后。换句话说,引起最初摘要的不是对象的变化(尽管它至少有一个原因)。@Dalorzo,非常感谢!但我只想为change()函数运行一些代码(如果$watch由其他函数触发,则不应执行代码)。怎么做?那你为什么需要一个观察者?如果您知道正在更改
change
中的
target
的值,只需在更改后执行逻辑即可。
target
在分配给它后立即更改。仅仅因为花了$watch一段时间才意识到这一点,并不意味着它没有发生。对吗?@Marc Kline,我希望代码在$watch执行后运行。