Asynchronous 角度2-停止';设置间隔';关于路由更改的http请求
我正在用Angular2编写一个实时更新图。我的图表正在通过Asynchronous 角度2-停止';设置间隔';关于路由更改的http请求,asynchronous,angular,setinterval,observable,angular2-routing,Asynchronous,Angular,Setinterval,Observable,Angular2 Routing,我正在用Angular2编写一个实时更新图。我的图表正在通过httpobservable和setInterval命令来更新 我注意到的一件奇怪的事情是,当我通过angular路由到我的应用程序上的另一个视图时,上一个组件上的setInterval命令没有停止,导致服务器出现不必要的负载 在Angular2中停止路由更改的http请求的正确方法是什么 任何帮助都将不胜感激。,它们基本上由事件循环处理 浏览器具有内部循环,称为事件循环,用于检查队列 并处理事件、执行函数等 因此,每当您添加任何异步事
http
observable和setInterval
命令来更新
我注意到的一件奇怪的事情是,当我通过angular路由到我的应用程序上的另一个视图时,上一个组件上的setInterval
命令没有停止,导致服务器出现不必要的负载
在Angular2中停止路由更改的http请求的正确方法是什么
任何帮助都将不胜感激。,它们基本上由事件循环处理
浏览器具有内部循环,称为事件循环,用于检查队列
并处理事件、执行函数等
因此,每当您添加任何异步事件(如setTimeout
/setInterval
)时,它们都会通过其处理程序添加到事件循环中
基本上,每当您想要停止/取消注册这些异步事件时,您都需要手动取消注册它们。像这里一样,您需要使用setInterval
对象引用调用clearInterval
方法,然后只有它将从事件循环中删除async
事件
您可以使用ngondestory
life-cycle钩子,在销毁组件之前,您可以在其中保存您的东西
//hook gets called before Component get destroyed or you can say disposed.
ngOnDestroy(){
clearInterval(intervalReference)
}
额外材料(与角度1相比)
在任何Javascript框架中都可以看到同样的问题。在Angular 1中,有一种方法可以处理这种情况(我添加了这个东西,这样来自Angular 1
背景的任何人都可以通过比较A1
和A2
轻松获得这个概念)。销毁控制器
时,在该元素的元素
和$scope
上发出的$destroy
事件。因此,通过让监听器处理$destroy
事件,我们过去常常做一些事情来确保那些对象值/object/events
不可用
$scope.$on('$destroy', function(event){
//do stuff here
})
element.bind('$destroy', function(event){
//do stuff here
})