【问题标题】:How to "delete" a variable from scope in angular.js [duplicate]如何从 angular.js 的范围中“删除”一个变量 [重复]
【发布时间】:2015-11-13 05:31:57
【问题描述】:

据我所知,当我们将变量附加到范围时,会对其应用手表,并且每个摘要周期都会对其进行检查。一个好的经验法则是,我们不应该在给定时间观察超过 2000 个变量。

我的问题是如何从范围中删除已经存在的变量。例如$scope.var1=1 说我必须创建它以供一次性使用。我是否可以从作用域中“删除”它,或者变量会在作用域的生命周期内被监视?

编辑:

从下面的 cmets 中,我了解到您应该手动移除手表,否则它们会在范围被破坏时被破坏。但是,我仍然不清楚您将如何删除由 ngModel 等指令设置的变量的监视?

【问题讨论】:

  • @Roman C 如果我错了,请纠正我,所以问题中建议的解决方案是我们删除对给定变量的引用,本质上让垃圾收集器完成工作?我也考虑过,但我认为他们可能是一种更“有角度”的方式来做到这一点
  • 仅仅在作用域上创建一个值并不会在其上创建一个监视......另外,如果有一个监视,简单地删除作用域上的变量不会清理监视。如果担心手表太多,请在适用的情况下考虑一次性绑定(Angular > 1.3)。

标签: javascript angularjs


【解决方案1】:

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

delete $scope.var1;

【讨论】:

  • 好的,通过使用 delete 关键字,我们从对象中取消引用属性。所以这应该摆脱相应的手表并防止它在摘要循环中被检查,我的理解是否正确?
  • 否 -- 删除该值(如果已定义)将导致执行监视回调,因为该值从已定义变为已删除/未定义。 watch 是通过调用 $scope.$watch 显式设置的,或者通过使用创建 watch 的指令隐式设置(例如 ngModel)。
  • $scope 对象中不再存在该属性,并且在摘要周期中未检查它,但手表保持不变。如果您想删除手表,请参阅Angular Js Clear $watch
  • 好的,现在我明白了它是如何工作的,所以基本上我所要担心的是从范围上设置的变量中删除不必要的手表,以防止我的应用程序变慢,但是我该如何删除监视由指令设置监视的变量,例如 ngModel ?
猜你喜欢
  • 2013-02-20
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2020-08-14
  • 2013-09-27
  • 2015-08-20
相关资源
最近更新 更多