AngularJS控制器被破坏,如果DOM元素被“破坏”;移除”;
AngularJS Controller gets destroyed if the DOM element gets "removed"?
我有一个指令附在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),它仍然会被执行。但这并不意味着控制器的存在。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- angularjs移除焦点上的活动类并添加到下一个项目
- Jquery移除或更改JSON根元素
- 移除类(如果移动)
- 如何移除或改进:在Bootstrap Carousel上聚焦风格
- 添加到购物车和移除计数的产品丢失,而移除露天市场中的项目
- jquery从另一个元素中移除移除
- 动画制作/减缓元素填充移除元素留下的空间
- 从一个数组中移除字符串(如果存在于另一个数组)
- 使用jquery从列表项中移除类,并将一个类添加到另一个列表项中
- JavaScript/jQuery:如何在“;显示:无”;被移除
- underline-js:将键对象与数组键对象进行比较,如果存在,则移除现有的添加新的
- 从数组jquery中基于子字符串的移除项
- 移除字符串(如果找到)移除JS中字符串的一部分
- 如何通过Prototype或jquery移除子类的父类基类
- 从数组中移除值
- Jquery移除元素
- AngularJS控制器被破坏,如果DOM元素被“破坏”;移除”;
- 当作用域被破坏时,应该移除angular $watch吗?
- 通过angular指令移除或添加一个元素会破坏input[radio]上的ng-model