【问题标题】:When is $destroy triggered in AngularAngular 中何时触发 $destroy
【发布时间】:2014-12-23 23:01:54
【问题描述】:

我有几个关于 Angular 的问题,如果有人为我解决这些问题,我将非常感激。

  1. 我了解在控制器和指令的情况下范围在 Angular 中是如何工作的,但我很困惑它们何时被销毁(当 $destroy 被触发时)。如果有人能对 Angular 中作用域的生命周期有所了解,那就太好了。

  2. 假设我的应用程序中有一堆控制器和指令。当它们中的每一个被加载和卸载到内存中时。谁能告诉我更多关于控制器和指令的生命周期?

问候。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    当使用 AngularJS 编译器 ($compile) 编译的 DOM 元素被销毁时,它会发出 $destroy 事件,该事件可用于删除可能导致内存泄漏的指令或控制器、一些观察者或事件监听器。

    作用域何时被销毁?

    例如,当您使用 ngRoute 更改路由时,您正在使用的控制器会破坏其作用域并根据下一个路由控制器加载新的$scope

    另一个 $scope 被销毁的例子是 ngRepeat,它会销毁剩余的项目:

    // remove leftover items
    for (var blockKey in lastBlockMap) {
        block = lastBlockMap[blockKey];
        elementsToRemove = getBlockNodes(block.clone);
        $animate.leave(elementsToRemove);
        if (elementsToRemove[0].parentNode) {
            // if the element was not removed yet because of pending animation, mark it as deleted
            // so that we can ignore it later
            for (index = 0, length = elementsToRemove.length; index < length; index++) {
                elementsToRemove[index][NG_REMOVED] = true;
            }
        }
        block.scope.$destroy();
    }
    

    我怎样才能自己销毁$scope

    使用$scope.$destroy();

    当 $scope 被销毁时会发生什么?

    Angular 发出一个$destroy 广播事件,之后:禁用该范围的侦听器、观察者和应用/摘要方法,然后执行默认的$destroy 事件侦听器,将范围标记为已销毁。

    【讨论】:

      【解决方案2】:

      范围的生命周期,参考以下链接

      http://onehungrymind.com/notes-on-angularjs-scope-life-cycle/

      控制器的生命周期,参考以下链接

      What is the lifecycle of an AngularJS Controller?

      希望对你有帮助...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 2017-11-20
        • 2021-04-01
        相关资源
        最近更新 更多