AngularJS-由$scope创建的作用域何时执行$new()已删除.垃圾收集器或Angular负责处理它吗

AngularJS - When does a scope created by $scope.$new() removed. Does the garbage collector or Angular takes care of it?

本文关键字:收集器 Angular 处理 删除 创建 scope 作用域 何时 AngularJS- new 执行      更新时间:2023-09-26

我想知道$scope是如何创建作用域的$在下面的场景中删除了new()。

我的场景-$scope创建了一个新的作用域$new(),添加了一些属性,并将其传递给角度脚本模板

<script type="text/ng-template" id="row-details.html">
<tr><td>code</td></tr>
</script>

其动态地创建新的表行。所以在我的例子中,每一个<tr>行都得到一个新的作用域。每当双击html表中的行或列时,我都会动态创建表行。

现在,在一些事件中,例如,在某个父行或列或任何地方"双击",我删除了通过模板创建的新行,该新行通过$scope具有新的作用域$new(),我的问题是这是否也会删除对$scope的引用$new()scope,否则我将不得不手动删除它,或者在某个时候垃圾收集器将删除它,因为使用它的表行已从DOM中删除,所以没有引用它。

对以上内容的总体关注是,我希望确保应用程序中没有内存泄漏。

所以总的来说,我有两个问题——

  1. 一旦从DOM中删除了相关的DOM行,angular或垃圾收集器会自动删除新的作用域吗
  2. 我如何通过Chrome开发工具或任何其他方式测试这一点,无论引用是否被删除,并且该特定代码没有内存泄漏

如果您需要更多详细信息,请告诉我。谢谢

当有人调用其$destroy方法时,作用域将被删除。

当其祖先之一被移除时,该范围也会被移除。

"删除";意味着作用域及其子级将不再接收摘要调用,此外,还应该进行垃圾收集。

来自$new$destroy方法范围的文件。

$new(隔离,父级)

创建新的子作用域。

父作用域将传播$digest()事件。可以使用$destroy()从作用域层次结构中删除该作用域。

当希望作用域及其子作用域与父作用域永久分离,从而通过调用停止参与模型更改检测和侦听器通知时,必须在作用域上调用$destroy()

$destroy()

从父作用域中删除当前作用域(及其所有子作用域)。删除意味着对$digest()的调用将不再传播到当前作用域及其子作用域。删除还意味着当前作用域有资格进行垃圾收集。

具体来说,对于您的问题,您必须在创建的子作用域上调用$destroy。仅仅删除DOM元素不会触发它——子作用域仍然在作用域层次结构中,并且有对它的引用

plunker-用于说明