gpt4 book ai didi

angularjs - 更改路由时事件处理程序被复制

转载 作者:搜寻专家 更新时间:2023-11-01 00:23:57 25 4
gpt4 key购买 nike

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

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

基本上发生的情况是,每次我离开一个 View 并返回它时,所有事件都会比以前触发两倍。

在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 次,然后继续。因此,我遇到了内存泄漏,最终导致浏览器崩溃。

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

最佳答案

事件监听器永远不会被直接移除,你需要强行移除它们。您需要在 $destroying controller 时注销监听器

代码

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

关于angularjs - 更改路由时事件处理程序被复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30534664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com