Angularjs 更改路由时复制的事件处理程序

Angularjs 更改路由时复制的事件处理程序,angularjs,node.js,events,socket.io,zeromq,Angularjs,Node.js,Events,Socket.io,Zeromq,我的数据以每秒30次的速度传输,并通过这些事件处理程序传送到我的应用程序。我使用的是btford.socket-io,0MQ负责将数据传输到node.js服务器 我已经跟踪到了来自节点服务器的数据,并意识到数据的传输是正确的,因此复制实际上是在角度方面发生的 基本上,每次我离开一个视图并返回它时,所有事件的触发次数都是以前的两倍 在btford API参考中,他给出了使用 socket.forward('dataUpdate', $scope); $scope.$on('socket:dataU

我的数据以每秒30次的速度传输,并通过这些事件处理程序传送到我的应用程序。我使用的是btford.socket-io,0MQ负责将数据传输到node.js服务器

我已经跟踪到了来自节点服务器的数据,并意识到数据的传输是正确的,因此复制实际上是在角度方面发生的

基本上,每次我离开一个视图并返回它时,所有事件的触发次数都是以前的两倍

在btford API参考中,他给出了使用

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次,然后继续。这样一来,我的内存就会泄漏,最终浏览器会崩溃


有人对我如何改进它有什么想法吗?

事件侦听器永远不会被直接删除,您需要强制删除它们。在销毁控制器时,您需要注销侦听器

代码

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.
})

@费利佩夫斯很高兴能帮助你……谢谢:)