Angular Watch and ng-click sequence of events
我在一个角度指令中有这个代码,我发现$watch的行为有点令人困惑。在"ng click"中调用updateSelect:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | scope.updateSelect = function (type) { scope.selectionCtrl.activeList = scope.seedLists[type]; scope.selectionCtrl.activeListKey = type; scope.selectionCtrl.activeSelection = scope.selection[type]; scope.selectionCtrl.staged = []; scope.selectionCtrl.stageRemove = []; if (type !== scope.activeTab) { scope.activeTab = type; } console.log("update"); }; scope.$watch('selectionCtrl.activeList', function(newValue, oldValue) { console.log("watch"); }, true); |
当我点击按钮(触发UpdateSelect)并观看控制台时,我看到"更新",然后看到"观看"。函数内部发生的第一件事是设置了
数组一改变就不应该监视触发器吗?
该函数已完成第一个JavaScript是单线程的。
因为函数被称为通过点击"伍角指令,要运行一个消化周期。这是部分消化周期运行通过观察列表和解决所有可能发生的变化,从一个周期的最后回答。
在你给的例子,这是发生在selectionctrl.activelist updateselect随后被称为回调结果的观察。
当不执行
它
让
更多的info.,查找;
- 我如何使用美元美元美元和观察的范围。应用范围。在angularjs美元?
- http:/ / / / # groups.google.com论坛!hnjztexrztk /主题/角
http:////NG/API docs.angularjs.org元/ rootscope.scope型:
这是所谓的在每个调用watchexpression文摘(美元)和要返回的值将作为。(因为)reruns文摘(美元时,它的变化在detects watchexpression CAN执行多次通过美元)和消化(应该是幂等的。)
记者:如果你尝试
1 2 | scope.selectionCtrl.activeList = scope.seedLists[type]; scope.$digest(); |
你会得到错误:[美元]:适用于rootscope inprog美元已经在进步。