打开Angular UI模态框时,观察功能会累积。

4 浏览
0 Comments

打开Angular UI模态框时,观察功能会累积。

我在指令中有以下代码。该指令是包含在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(){  // 我只需要运行此函数一次
    scope.$on("cancel",function(event,data){
        alert("cancelled");
    });
 };

0