2017-01-24 122 views
3

发现这个代码在一个项目的指示我的工作之一:

element.on('$destroy', function() { 
    scope.$destroy(); 
}); 

需要该代码?或者我可以删除它?指令被销毁后,范围是否被销毁?

+0

我在网站的子组件上使用类似的东西时,一些元素被我们的角度应用程序之外的父应用程序删除,这只是摧毁一些绑定和侦听器的方式 – maurycy

+0

我看到的唯一一点 - 如果这是另一个元素的范围。这仍然是**,但可能会做点什么。 –

+0

代码正在调用另一个指令的编译/追加,但我已将其删除。 – jcubic

回答

1

记住,除非有您识别它的目的,实际上$destroy()去除它的父作用域范围,下面是)正式文件的摘录

$摧毁(; 从父范围中删除当前范围(及其所有子范围)。删除意味着对$ digest()的调用将不再传播到当前作用域及其子级。去除也意味着当前范围有资格进行垃圾回收。

另请检查此SO Thread例如和详细的说明。

1

您不必编写此代码。

根据文档,在两种情况下会触发$destroy事件。

  • 一个范围破坏
  • 的元素从DOM

取出就在作为一个侧面说明只要之前,你仍然可以使用元素的scopeelement.on('$destroy')事件之前范围将被销毁:

element.on('$destroy', function() { 
    console.log('RIP', scope); 
});