如何在angular.js中从作用域中“删除”变量

11

根据我的了解,当我们将一个变量附加到作用域时,将对其应用观察者,并在每个digest循环中进行检查。一个好的经验法则是,我们不应该同时监视超过2000个变量。

我的问题是如何从作用域中删除已经存在的变量。例如$scope.var1=1,假设我创建它只是为了一次使用。我能否从作用域中“删除”它,还是这个变量会在作用域的生命周期内被监视?

编辑:

根据下面的评论,我理解您应该手动删除观察器,否则它们将在作用域被销毁时被销毁。然而,我仍然不清楚如何删除由指令(例如ngModel)设置的变量的观察器?


@Roman C 如果我错了请指出,问题中建议的解决方案是删除对给定变量的引用,从本质上让垃圾收集器来完成这项工作吗?我也考虑过这个方法,但我认为可能有一种更“Angular”的方法来解决它。 - Kiran Yallabandi
仅在作用域上创建一个值并不会为其创建监视器...此外,如果存在监视器,则仅删除作用域上的变量并不能清除监视器。如果担心有太多的监视器,请考虑一次性绑定(Angular > 1.3),在适当的情况下使用。 - Patrick
1个回答

36

您可以简单地使用delete关键字:

delete $scope.var1;

好的,通过使用delete关键字,我们可以从对象中取消引用属性。这样应该可以摆脱相应的监视器,并防止在digest周期中被检查,我的理解是正确的吗? - Kiran Yallabandi
2
不删除该值(如果已定义)将导致观察回调执行,因为该值从已定义变为已删除/未定义。通过调用 $scope.$watch 显式设置监视器,或者通过使用创建监视器的指令(例如 ngModel)隐式设置监视器。 - Patrick
该属性不再存在于$scope对象中,并且在digest周期中也不会被检查,但是监视器仍然保持不变。如果您想要删除监视器,请参见Angular Js Clear $watch - aghidini
1
好的,现在我明白它是如何工作的了。所以基本上我只需要担心从作用域中删除不必要的变量监视器,以保持我的应用程序不会变慢。但是,对于那些由指令设置监视器的变量,例如ngModel,我该如何删除监视器呢? - Kiran Yallabandi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接