我在页面加载时处理查询字符串,并注意到有关$ watch的内容。
看起来$ watch需要一些时间来调用它 - 这个过程是异步的。
我发现我必须处理竞争条件,因为我的$ watch不应该触发它 - 也就是说,$ watch声明后设置的值不会被$ watch评估。 / p>
有关问题的说明,请参阅此示例:http://jsbin.com/kapifezi/24/edit
有没有人在使用手表以避免此类问题方面有最佳做法?
答案 0 :(得分:1)
事实证明 - 在进一步调查之后 - 我并不完全理解$ watch是如何运作的。
http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/确实帮助了解情况。
事实证明 - 只需更改正在观看的变量就不会自动触发摘要循环。
$timeout
工作的原因是因为它安全地#34;调用$digest
会导致评估所有$watch
个表达式 - 也就是说,$digest
的{{1}}组件导致$timeout
火和不等待1000毫秒。
经验教训。
答案 1 :(得分:0)
你的意思是$ timeout内更新的值???在$ scope内将$ scope.val更改为1并且在$ scope.val更新之后将有1000毫秒的延迟
答案 2 :(得分:0)
不是真的有什么意思,但在我的控制器中,如果我需要观察一些var我这样做:
$scope.myValue = "value";
$scope.$watch("myValue", function(val) {
if (val) {
console.out(val);
}
});