相关疑难解决方法(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万
查看次数

socket.io删除特定的侦听器

我正在使用Socket.io v0.9.16和Chrome 34

我正在尝试删除特定的侦听器,或取消订阅特定的订阅

像这样的东西:

socket.on('testComplete',function(data){
    console.log('test complete',data);
}); 

function emitTest(){
    console.log('emitting test');
    socket.emit('test','first emit');
}

function removeListener(){
    socket.removeListener('testComplete');
}
Run Code Online (Sandbox Code Playgroud)

如果我调用该emitTest函数,然后调用该函数,我再次调用时removeListener仍会看到该'test complete'消息emitTest.如果套接字功能工作,则应该删除监听器.

我正在寻找一种方法来删除实际工作的特定侦听器.

这个答案说removeListener不起作用.

这样做是否有任何不利因素:

socket.removeListener=function(name){
        if(socket.$events.hasOwnProperty(name)){
            delete socket.$events[name];
        }
    };
Run Code Online (Sandbox Code Playgroud)

我将答案标记为正确,但我在我的代码中使用了上述代码,因为它对我的设计更有效.

javascript sockets socket.io

54
推荐指数
2
解决办法
5万
查看次数

标签 统计

angularjs ×2

javascript ×1

memory-leaks ×1

socket.io ×1

sockets ×1