angularjs – 当范围被破坏时,是否需要“展开”范围变量?
发布时间:2020-12-17 09:15:49 所属栏目:安全 来源:网络整理
导读:下面是有角度的文档.我正在看几个属于此范围的变量,以构建一个用于ng-grid的过滤器字符串.当这个范围被破坏时,我需要通过从$scope.$watch调用返回值来解除它们,还是破坏足够的范围来处理它?如果被观看的变量不属于此范围,该怎么办? 如果我不“篡改”正在被
下面是有角度的文档.我正在看几个属于此范围的变量,以构建一个用于ng-grid的过滤器字符串.当这个范围被破坏时,我需要通过从$scope.$watch调用返回值来解除它们,还是破坏足够的范围来处理它?如果被观看的变量不属于此范围,该怎么办?
如果我不“篡改”正在被破坏的变量与范围,我会泄漏内存/导致性能问题. $摧毁() 从父范围中移除当前范围(及其所有子项).删除意味着对$digest()的调用将不再传播到当前范围及其子项.删除也意味着当前范围有资格进行垃圾回收. $destroy()通常由诸如ngRepeat的指令用于管理循环的展开. 在范围被破坏之前,在此范围上广播$destroy事件.应用程序代码可以注册一个$destroy事件处理程序,它将有机会执行任何必要的清理. 请注意,在AngularJS中,还有一个$destroy jQuery事件,可以在元素从DOM中删除之前清除DOM绑定.
快速浏览源代码将显示$watch返回的删除功能不会出现异常情况.它只是从范围中删除一个项目.$$watchers数组.
因此,一旦范围被破坏,整个阵列将随之而来,垃圾收集器将为您清理所有内容. 无论您在观看什么,手表本身都存储在范围内.这就是为什么,为了使用$watch,你不要调用angle.$watch,而是调用$scope.$watch. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |