我的这些数据以每秒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次继续。有了这个,我得到了内存泄漏,最终浏览器崩溃了。
有没有人对如何让它变得更好有任何想法?
答案 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.
})