打开Angular UI模态框时,观察功能会累积。
- 论坛
- 打开Angular UI模态框时,观察功能会累积。
4 浏览
打开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"); }); };