更改路径时事件处理程序重复

时间:2015-05-29 16:31:53

标签: angularjs node.js events socket.io zeromq

我的这些数据以每秒30次左右的速度发送,它通过这些事件处理程序提供给我的应用程序。我正在使用btford.socket-io,而0MQ负责将数据传送到我的node.js服务器。

我已经跟踪了来自节点服务器的数据并意识到它正确,所以重复实际上发生在Angular端。

基本上发生的事情是,每当我离开视图并回到视图时,所有事件都会被激发两倍。

在btford API Reference中,他提出了使用

的建议
socket.forward('dataUpdate', $scope);
$scope.$on('socket:dataUpdate', function(ev, data) {
   $scope.someVar1 = data;
   $scope.someVar2 = data;
   $scope.someVar3 = data;
   $scope.someVar4 = data;
});

这有助于另一种情况。但是,正如我所说的那样,在这种情况下,这个事件每秒被调用30次并处理4次,因为有4个变量。因此每次我改回显示这些变量的路线,而不是做4次工作,它会做8次然后12次,16次继续。有了这个,我得到了内存泄漏,最终浏览器崩溃了。

有没有人对如何让它变得更好有任何想法?

1 个答案:

答案 0 :(得分:5)

事件监听器永远不会被直接删除,您需要强行删除它们。 $ $销毁控制器

时需要取消注册监听器

<强>代码

socket.forward('dataUpdate', $scope);
var socketEvent = $scope.$on('socket:dataUpdate', function(ev, data) {
   $scope.someVar1 = data;
   $scope.someVar2 = data;
   $scope.someVar3 = data;
   $scope.someVar4 = data;
});

$scope.$on('$destroy', function(){
   socketEvent(); //deregistering event while destroying controller scope.
})