我有一个角度应用程序,它有一个控制器,它具有一个函数,可以在变量的基础上监视变量;就是这样,
angular.module('myApp').controller('myController', function($scope, $rootScope) {
$rootScope.$watch('someVar', function() {
console.log($rootScope.someVar);
});
}
出于某种原因,如果我将$ rootScope.someVar更改为“Hello”,我会得到以下控制台输出
> Hello
> Hello
> Hello
为什么这样做?我正在编写一个解析大型数据文件的程序,如果我的性能提高了三倍,我的生活会更快乐。
答案 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);
});