5

我正在使用Angular2编写实时更新图。我的图形正在通过http可观察数据和setInterval命令进行更新。Angular2 - 在路由更改时停止'setInterval'http请求

我注意到的一个奇怪的事情是,当我通过角度路由到我应用上的不同视图时,上一个组件上的setInterval命令不会停止,导致服务器发生不必要的负载。

什么是正确的方法来阻止setInterval对Angular2路由变更的http请求?

任何帮助将不胜感激。

回答

5

Events are managed very differently by browsers,基本上它们是由处理事件循环

的浏览器内循环,称为事件循环,检查队列 和处理事件,执行功能等

所以每当你添加任何异步事件setTimeout/setInterval,他们被添加到事件循环与他们的处理程序。

基本上,只要你想stop/de-register这些异步事件,你需要手动注销它们。像这里一样,您需要使用setInterval对象引用调用clearInterval方法,那么只有它将从Event Loop中删除async事件。

您可以使用ngOnDestroy生命周期钩子,在销毁组件之前您可以拥有自己的东西。

//hook gets called before Component get destroyed or you can say disposed. 
ngOnDestroy(){ 
    clearInterval(intervalReference) 
} 

多余的东西(与角1相比)

的同样的问题,你可以在任何JavaScript框架看。在Angular 1中,有办法处理这种情况(我添加了这些东西,以便任何来自Angular 1背景的人都可以通过比较A1A2轻松获得此概念)。同时破坏controller实例角度内部发射的$destroy事件超过该元素的element & $scope。所以通过听取事件,我们曾经做过一些事情来确保那些对象value/object/events不应该可用。

$scope.$on('$destroy', function(event){ 
    //do stuff here 
}) 

element.bind('$destroy', function(event){ 
    //do stuff here 
})