AngularJS控制器被破坏,如果DOM元素被“破坏”;移除”;

AngularJS Controller gets destroyed if the DOM element gets "removed"?

本文关键字:破坏 移除 元素 如果 控制器 AngularJS DOM      更新时间:2023-09-26

我有一个指令附在angularjs控制器上,类似

<my-directive id="my-unique-directive" ng-controller="MyController"></my-directive>

在我的控制器里,在某个时刻,我需要这个指令消失。然后我在其中混合了一些jQuery,这样我就可以$('#my-unique-directive').remove();

它很好用,但我做得对吗?我知道您不应该访问控制器内的DOM元素,但否则我将如何实现此结果?

为了测试我的Controller是否被破坏,我设置了一个每隔一秒console.log('I'm still here');的函数,这个函数在我删除DOM元素后立即调用。(此外,该功能连接到控制器本身,而不是$scope)

这证实了我的担忧:控制器没有被销毁,即使在指令被删除后,日志也会继续显示。

销毁DOM元素后,如何销毁控制器?

ng-if将为您完成以下工作:

<my-directive id="my-unique-directive" ng-controller="MyController" ng-if="!isDeleted"></my-directive>

只要将isDeleted设置为true,就会删除元素和相关的作用域。

注意:如果你将控制器存储到某个变量中,它就不会被破坏。(由于垃圾收集器将无法收集它)如果您使用$timeout(console.log("I am here"),1000),它仍然会被执行。但这并不意味着控制器的存在。