关于angularjs:Angular Watch和ng-click事件序列

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)并观看控制台时,我看到"更新",然后看到"观看"。函数内部发生的第一件事是设置了selectionCtrl.activeList,所以我希望看到"watch",然后看到"update"。

数组一改变就不应该监视触发器吗?


该函数已完成第一个JavaScript是单线程的。

因为函数被称为通过点击"伍角指令,要运行一个消化周期。这是部分消化周期运行通过观察列表和解决所有可能发生的变化,从一个周期的最后回答。

在你给的例子,这是发生在selectionctrl.activelist updateselect随后被称为回调结果的观察。


当不执行watch回调角?

$digest$apply相关,和它是不执行的JavaScript代码和原始。

watchexecute forcefully $scope.apply(),你可以手动运行,但可能更多的问题和没有必要的,因为如果它是在一angularjs超时功能,即美元美元,间隔等,因为它会自动后的功能。

更多的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美元已经在进步。