在deregisterWatch之后仍然会调用angularjs watch

时间:2014-10-23 16:00:01

标签: javascript angularjs watch

我得到一个非常奇怪的行为,我想知道这是否是预期的或应该改变的东西。我有一个带有以下代码的控制器:

在此处查看演示:http://fiddle.jshell.net/cqofLqwm/

UserSvc.refreshCyclic(20 * 1000);
$scope.$on('userchanged', function onUserChanged(event, user) {
  stopWatchScopeUser();
  $scope.model.user = user;
  watchScopeUser();
});

function watchScopeUser() {
  stopWatchScopeUser = $scope.$watch('model.user', function scopeUserChanged(newValue, oldValue) {
    if (newValue !== oldValue) {
      console.log('user changed');
    }
  }, true);
}

watchScopeUser();

UserSvc.refreshCyclic每隔20秒从服务器获取一次用户,并检查user对象的更改。如果有更改,则会引发userchanged事件。

这里发生的事情是,即使在致电stopWatchScopeUser()后,在将user分配给$scope.model.user时,也会调用监视表达式,newValue等于oldValue ,都是最近的用户。 (因此条件newValue !== oldValue失败)。

如果我发表评论stopWatchScopeUser,则会调用scopeUserChanged,但newValueoldValue不同。

奇怪的是,在model.user上分离手表后,它仍在被召唤。这是正常行为还是有不正确的行为?我该怎样做才能确保看守听众呢?

0 个答案:

没有答案