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

fel*_*fss 2 events zeromq node.js socket.io angularjs

我有这样的数据以每秒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;
});
Run Code Online (Sandbox Code Playgroud)

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

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

Pan*_*kar 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.
})
Run Code Online (Sandbox Code Playgroud)