gpt4 book ai didi

angularjs - 当范围被销毁时,我是否需要 "unwatch"范围变量?

转载 作者:行者123 更新时间:2023-12-04 01:46:58 25 4
gpt4 key购买 nike

以下是来自 Angular 的文档。我正在查看属于此范围的几个变量,以构建 ng-grid 的过滤器字符串。 .当这个作用域被销毁时,我是否需要通过调用 $scope.$watch 的返回值来取消监视它们? ,或者范围的破坏是否足以解决这个问题?如果被监视的变量不是这个范围的一部分怎么办?

如果我不“取消监视”与范围一起被破坏的变量,我会泄漏内存/导致性能问题。

$destroy()

从父作用域中移除当前作用域(及其所有子作用域)。删除意味着调用 $digest()将不再传播到当前范围及其子范围。删除还意味着当前范围有资格进行垃圾收集。
$destroy()通常由 ngRepeat 等指令使用用于管理循环的展开。

就在作用域被销毁之前,$destroy事件在此范围内广播。申请代码可以注册一个$destroy事件处理程序,这将使它有机会执行任何必要的清理。

请注意,在 AngularJS 中,还有一个 $destroy jQuery 事件,可用于在从 DOM 中删除元素之前清理 DOM 绑定(bind)。

最佳答案

快速查看源代码会告诉您 $watch 返回的删除函数没有做任何异国情调的事情。它只是从 scope.$$watchers 中删除一个项目大批。

因此,一旦作用域被销毁,整个数组就会随之消失,垃圾收集器将为您清理所有内容。

无论您在看什么, watch 本身都存储在示波器中。这就是为什么,为了使用 $watch ,您不调用angular.$watch ,而是您调用$scope.$watch .

关于angularjs - 当范围被销毁时,我是否需要 "unwatch"范围变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20715113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com