4

我有一个有角度的应用程序,它有一个控制器,它的函数可以观察一个变量,因为它在 rootscope 中发生变化;那是,

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

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

> Hello
> Hello
> Hello

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

4

2 回答 2

2

如果监视的副作用导致变量更改,则再次调用监视,直到解决所有更改。

因此,如果导致手表被触发的动作(改变 someVar 的动作)导致其他也更新 someVar 的动作,则可能会有级联(在 angular 足够之前最多 10 次?)

于 2013-07-18T18:30:04.713 回答
0

子控制器查看$rootScope上的变量并“打开”更多次该控制器时,我遇到了类似的问题。每次我打开控制器时,似乎角度都会添加一个不同的观察者,并且当变量发生变化时,观察者会触发更多次。

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

应用控制:

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

子控件:

$scope.$on('myEventName', function(event, obj){
    console.log(obj);
});
于 2014-07-23T20:34:01.457 回答