我正在处理页面加载时的查询字符串,并注意到一些关于$watch的问题。
当$watch被调用时,它看起来需要一些时间来注册——这个过程是异步的。
我发现我必须处理竞态条件,因为我的$watch在应该触发的时候没有触发——也就是说,在$watch声明之后设置的值不会被$watch计算。
请参阅此示例以了解问题:http://jsbin.com/kapifezi/24/edit
谁有最好的使用手表的方法来避免这类问题?
在进一步调查后发现,我并没有完全理解$watch是如何工作的。
http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/确实帮助我们了解了一些情况。
事实证明,简单地更改正在监视的变量本身不会触发摘要循环。
$timeout
工作的原因是因为它"安全地"调用$digest
,导致所有$watch
表达式被求值-也就是说,是$timeout
的$digest
组件导致$watch
着火,而不是等待1000毫秒。
教训。
你的意思是在$timeout内更新值吗?$scope之前将有1000毫秒的延迟。在$timeout和$scope之后,Val被更改为1。
不是很明白你的意思但是在我的控制器中如果我需要观察一些变量我这样做:
$scope.myValue = "value";
$scope.$watch("myValue", function(val) {
if (val) {
console.out(val);
}
});