为什么$ rootScope。$ watch多次返回一个值?

时间:2013-07-18 17:09:27

标签: angularjs angularjs-scope

我有一个角度应用程序,它有一个控制器,它具有一个函数,可以在变量的基础上监视变量;就是这样,

angular.module('myApp').controller('myController', function($scope, $rootScope) {
    $rootScope.$watch('someVar', function() {
        console.log($rootScope.someVar);
    });
}

出于某种原因,如果我将$ rootScope.someVar更改为“Hello”,我会得到以下控制台输出

> Hello
> Hello
> Hello

为什么这样做?我正在编写一个解析大型数据文件的程序,如果我的性能提高了三倍,我的生活会更快乐。

2 个答案:

答案 0 :(得分:2)

如果手表的副作用导致变量变化,则会再次调用手表,直到所有更改都得到解决。

因此,如果导致手表被触发的动作(更改someVar的动作)导致其他动作也会更新someVar,那么可以有一个级联(在角度足够之前最多10次?)

答案 1 :(得分:0)

我在 $ rootScope 上观看子控制器上的变量并且打开'更多次这个控制器。每次我打开控制器似乎角度添加一个不同的观察者,当变量改变观察者发射更多次。

我解决了这个问题,在父控制器(AppCtrl)内部添加观察者并广播自定义事件,同时在子控制器(ChildCtrl)上侦听该事件:

AppCtrl:

$rootScope.$watch('myVar', function(myVar){
    if(myVar){
        var obj = doSomethingWithMyVar(myVar);
        $scope.$broadcast('myEventName', obj);
    }
});

ChildCtrl:

$scope.$on('myEventName', function(event, obj){
    console.log(obj);
});