我正在使用Angular2编写实时更新图。我的图形正在通过http
可观察数据和setInterval
命令进行更新。Angular2 - 在路由更改时停止'setInterval'http请求
我注意到的一个奇怪的事情是,当我通过角度路由到我应用上的不同视图时,上一个组件上的setInterval
命令不会停止,导致服务器发生不必要的负载。
什么是正确的方法来阻止setInterval
对Angular2路由变更的http请求?
任何帮助将不胜感激。
我正在使用Angular2编写实时更新图。我的图形正在通过http
可观察数据和setInterval
命令进行更新。Angular2 - 在路由更改时停止'setInterval'http请求
我注意到的一个奇怪的事情是,当我通过角度路由到我应用上的不同视图时,上一个组件上的setInterval
命令不会停止,导致服务器发生不必要的负载。
什么是正确的方法来阻止setInterval
对Angular2路由变更的http请求?
任何帮助将不胜感激。
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
背景的人都可以通过比较A1
和A2
轻松获得此概念)。同时破坏controller
实例角度内部发射的$destroy
事件超过该元素的element
& $scope
。所以通过听取事件,我们曾经做过一些事情来确保那些对象value/object/events
不应该可用。
$scope.$on('$destroy', function(event){
//do stuff here
})
element.bind('$destroy', function(event){
//do stuff here
})