何时在Angular中触发$ destroy

时间:2014-10-28 13:49:46

标签: angularjs

我对Angular有几个问题,如果有人为我清理它,我会非常感激。

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

  2. 假设我的应用程序中有很多控制器和指令。当它们中的每一个被加载并卸载到存储器中时。有人能告诉我更多有关控制器和指令的生命周期的信息吗?

  3. 问候。

2 个答案:

答案 0 :(得分: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事件侦听器,将范围标记为已销毁。

答案 1 :(得分:0)

对于范围的生命周期,请参阅以下链接

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

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

What is the lifecycle of an AngularJS Controller?

希望它有所帮助...