我有一个附加到angularjs控制器的指令,类似于
<my-directive id="my-unique-directive" ng-controller="MyController"></my-directive>
在我的控制器内部,在某些时候我需要这个指令消失。然后我将一些jQuery混入其中,这样我就可以$('#my-unique-directive').remove();
它工作正常,但我这样做是否正确?我知道你不应该访问控制器里面的DOM元素,但我怎么能实现这个结果?
为了测试我的Controller是否被破坏,我设置了一个每{1}}一次的函数,并在删除DOM元素后立即调用此函数。 (此外,该功能附加到控制器本身,而不是$ scope)
这证实了我的担忧:控制器没有被销毁,即使删除了指令,日志也会继续显示。
如何在销毁DOM元素后销毁控制器?
答案 0 :(得分:1)
ng-if
将为您完成这项工作:
<my-directive id="my-unique-directive" ng-controller="MyController" ng-if="!isDeleted"></my-directive>
只需将isDeleted
设置为true即可删除元素及相关范围。
注意: 如果将控制器存储到某个变量,它将不会被销毁。 (因为垃圾收集器无法收集它) 如果你使用$ timeout(console.log(&#39;我在这里&#39;),1000) - 它仍将被执行。 但这并不意味着控制器存在。