当指令被销毁时,是否需要注册取消注册?

时间:2015-09-21 14:18:33

标签: javascript angularjs

据我所知,与$ watch不同,$ observe不会返回取消注册功能。

所以问题是 - 如果我在一个指令中有一个$ observe on属性,并且该指令被销毁了,那么自己会对这个$ observe进行角度清理吗?

如果没有,处理这个问题的角度方法是什么?

2 个答案:

答案 0 :(得分:1)

在Angular 1.3.0之前,无法取消注册$observe。自Angular 1.3.0起,$observe returns the unregister function

答案 1 :(得分:1)

如果您的担心是内存泄漏(因为它是我的),我将jsbin放在一起试着看看内存的行为并使用chrome检查器进行检查:

https://jsbin.com/luhewutetu/4/edit?html,js,output

我点击了“添加”了很多次,然后等了一下然后点击“删除”。然后我通过devtools强制垃圾收集。

这是生成的堆曲线:

enter image description here

从屏幕截图中可以看出,随着我添加元素,堆越来越大,但是当我删除所有内容并强制进行垃圾收集时,它会回到初始值。

所以,从这个简单的实验来看,似乎答案是肯定的,attribute.$observe监听器没有, general 需要取消注册。