我得到一个非常奇怪的行为,我想知道这是否是预期的或应该改变的东西。我有一个带有以下代码的控制器:
在此处查看演示: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
,但newValue
与oldValue
不同。
奇怪的是,在model.user
上分离手表后,它仍在被召唤。这是正常行为还是有不正确的行为?我该怎样做才能确保看守听众呢?