当前位置: 首页 > 面试题库 >

angular.js $ destroy事件-我应该手动解除绑定吗?

储臻
2023-03-14
问题内容

我试图找出角度基准是否自动解除绑定观察者和与之绑定的作用域事件,$scope.$on(...)或者
销毁*$scope.$watch(...)作用域? *

假设我有以下代码:

$scope.$on('someEvents', handleSomeEvent);
$scope.$watch('someProperty', handleSomePropertyChange);

在范围上触发$ destroy事件时,是否需要手动取消绑定这些观察程序和事件?


问题答案:

根据Angular文档$scope

当希望将作用域及其子作用域与父作用域永久分离时,必须在作用域上调用’$ destroy()’,从而通过调用停止参与模型更改检测和侦听器通知。

删除还意味着当前范围可以进行垃圾回收。

如此看来,当$destroy()调用时,所有观察者和侦听器都将被删除,并且表示作用域的对象变为eligible for garbage collection

如果我们查看destroy()
源代码,将会看到一行:

forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));

应该删除所有侦听器。

如@glepretre所述,它适用于控制器中的观察者和侦听器。上面列出的同一文档页面指出:

请注意,在AngularJS中,还有一个$ destroy jQuery事件,该事件可用于在从DOM中删除元素之前清除DOM绑定。

因此,如果指令中有特定的侦听器,则应侦听$destroy事件并自己进行必要的清理



 类似资料:
  • 比如: 使用render中绑定了事件,那么在destroy时需要手动解绑事件吗?

  • 本文向大家介绍浅谈jquery之on()绑定事件和off()解除绑定事件,包括了浅谈jquery之on()绑定事件和off()解除绑定事件的使用技巧和注意事项,需要的朋友参考一下 off()函数用于移除元素上绑定的一个或多个事件的事件处理函数。 off()函数主要用于解除由on()函数绑定的事件处理函数。 该函数属于jQuery对象(实例)。 语法 jQuery 1.7 新增该函数。其主要有以下两

  • 本文向大家介绍js绑定事件和解绑事件,包括了js绑定事件和解绑事件的使用技巧和注意事项,需要的朋友参考一下 在js中绑定多个事件用到的是两个方法:attachEvent和addEventListener,但是这两个方法又存在差异性 attachEvent方法  只支持IE678,不兼容其他浏览器 addEventListener方法   兼容火狐谷歌,不兼容IE8及以下 addEventListe

  • 本文向大家介绍jQuery unbind 删除绑定事件详解,包括了jQuery unbind 删除绑定事件详解的使用技巧和注意事项,需要的朋友参考一下 unbind([type],[data]) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件。如果没有参数,则删除所有绑定的事件。你可以将你用bind()注册的自定义事件取消绑定。如果提供了事件类型作为参数,则只删除该类型的绑定事件。

  • 除了可以使用addEventListener()方法监听某个特定元素上的事件外,也可以使用.on()方法实现批量元素的事件绑定。 .on( event , selector , handler ) event Type: String 需监听的事件名称,例如:'tap' selector Type: String 选择器 handler Type: Function( Event event )

  • 本文向大家介绍JQuery中绑定事件(bind())和移除事件(unbind()),包括了JQuery中绑定事件(bind())和移除事件(unbind())的使用技巧和注意事项,需要的朋友参考一下 有时候事件执行完了,想取消事件的效果可以通过一定的办法来处理。比如bind()(绑定事件)和unbind()(移除通过bind()方法添加的事件)方法来移除事件的效果。 比如下面的一个案例: html