相关疑难解决方法(0)

AngularJS - $ destroy是否删除事件监听器?

https://docs.angularjs.org/guide/directive

通过侦听此事件,您可以删除可能导致内存泄漏的事件侦听器.注册到范围和元素的监听器在销毁时会自动清理,但如果您在服务上注册了监听器,或者在未删除的DOM节点上注册了监听器,则必须自行清理或者你冒着引入内存泄漏的风险.

最佳实践:指令应该自行清理.您可以使用element.on('$ destroy',...)或范围.$ on('$ destroy',...)来删除指令时运行清理函数.

题:

element.on "click", (event) ->我的指令里面有一个:

  1. 当指令被销毁时,是否有任何内存引用element.on以防止它被垃圾收集?
  2. Angular文档声明我应该使用处理程序来删除$destroy发出的事件上的事件侦听器.我的印象是destroy()删除了事件监听器,是不是这样?

memory-leaks angularjs

197
推荐指数
1
解决办法
11万
查看次数

有人可以为AngularJS中的范围提供$ destroy事件的示例吗?

有人可以提供范围的$ destroy事件的例子吗?以下是http://docs.angularjs.org/api/ng.$ro​​otScope.Scope#$destroy的参考文档.

$摧毁()

从父作用域中删除当前作用域(及其所有子作用域).删除意味着对$ digest()的调用将不再传播到当前范围及其子节点.删除还意味着当前范围符合垃圾收集的条件.

$ destroy()通常由诸如ngRepeat之类的指令用于管理循环的展开.

在范围被销毁之前,在此范围内广播$ destroy事件.应用程序代码可以注册$ destroy事件处理程序,使其有机会执行任何必要的清理.

angularjs

66
推荐指数
2
解决办法
11万
查看次数

当角度开始破坏时,我们是否需要在指令中取消绑定事件监听器?

我的应用程序中存在大量内存泄漏但我没有找到原因,这是后台.

  • 我正在使用AngularJS + JQuery(插件)
  • 许多听众受到如下约束:

    $(element).on("keyup",function(){});

所以问题是

我是否需要通过以下方式取消绑定指令中的听众?

scope.$on("$destroy", function() {
    $(element).off();
}); 
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你如何找到Web应用程序中的内存泄漏?我使用chrome的配置文件(请参阅此处分析内存性能),但我无法跟踪内存泄漏的代码.你有什么建议吗?

非常感谢!

jquery memory-leaks event-listener angularjs

21
推荐指数
1
解决办法
1万
查看次数

删除DOM元素会删除关联的范围吗?

在Angular中,范围与DOM元素相关联.如果你打电话$element.remove(),$element.scope().$destroy()最终也会被召唤?或者开发人员是否负责自己清理范围?

这让我觉得删除DOM元素会自动删除范围:

angular.js

/////////////////////////////////////////////
// jQuery mutation patch
//
//  In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a
// $destroy event on all DOM nodes being removed.
//
/////////////////////////////////////////////

function JQLitePatchJQueryRemove(name, dispatchThis) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

angularjs

10
推荐指数
1
解决办法
6021
查看次数

标签 统计

angularjs ×4

memory-leaks ×2

event-listener ×1

jquery ×1