我在指令中有以下代码。该指令包含在Angular UI模式中:
var watchObjects = function(){
scope.vars.forEach(function(elem,i){
scope.$watch('vars['+i+'].obj', function(newValue, oldValue) {
if (typeof newValue === 'undefined')
return;
console.log(newValue)
});
});
};
当打开模态并加载指令时,在链接函数中,我只在第一次打开模态时调用watchObjects
。如果每次打开模态时都调用watchObjects
,则监视函数的数量开始累积(而不是在对象更改时调用一次,函数被调用N次,其中N表示模式打开的次数) )。为什么会这样?当模态关闭时,观察者不应该被摧毁吗?如果没有,有没有办法手动摧毁观察者?
更新
注册$on
以接收广播消息时遇到同样的问题。我需要在第一次打开模态时运行watchCancel
,否则将收到N次消息。
var watchCancel = function(){ // I need to invoke this function only once
scope.$on("cancel",function(event,data){
alert("cancelled");
});
};