手动Angular destroy指令

时间:2018-02-12 18:19:18

标签: javascript angular

有办法手动删除指令吗?例如,我只想做一些工作并删除指令,所以它不会留在内存中。

@Directive({
  selector: '[doSomething]'
})
export class DoSomethingDirective {

  constructor(private el: ElementRef) {
    // do something with the element and destroy the directive
  }

}

1 个答案:

答案 0 :(得分:2)

别。

<强>为什么

首先,我认为你不能从Angular那边清除指向实例的链接。

其次,让我们数一下羊。

  1. 如果指令对象上没有任何属性,并且没有在构造函数中订阅任何内容,那么每个指令都代表一个空对象(在构造函数完成执行之后)。垃圾收集器将清除所有局部变量。
  2. 如果垃圾收集器无法从第1点删除内容,那么从Angular的范围中删除指令链接是完全无关紧要的,因为事情仍会留在内存中。
  3. 在第1点和第2点之后,很明显执行后唯一剩下的就是从Angular的引擎到空对象的链接。
  4. 最后,结论:

    只要每个指令实例都是一个空对象,它与HTML元素绑定为1对1(这是一堆数据,包括运行时渲染,CSS规则等),很有可能你将面对问题与HTML元素的数量相比,你将面临内存问题,甚至不值得考虑清除这些指令。当然,除了事实上这是不可能的。