Asynchronous 角度2-停止';设置间隔';关于路由更改的http请求

Asynchronous 角度2-停止';设置间隔';关于路由更改的http请求,asynchronous,angular,setinterval,observable,angular2-routing,Asynchronous,Angular,Setinterval,Observable,Angular2 Routing,我正在用Angular2编写一个实时更新图。我的图表正在通过httpobservable和setInterval命令来更新 我注意到的一件奇怪的事情是,当我通过angular路由到我的应用程序上的另一个视图时,上一个组件上的setInterval命令没有停止,导致服务器出现不必要的负载 在Angular2中停止路由更改的http请求的正确方法是什么 任何帮助都将不胜感激。,它们基本上由事件循环处理 浏览器具有内部循环,称为事件循环,用于检查队列 并处理事件、执行函数等 因此,每当您添加任何异步事

我正在用Angular2编写一个实时更新图。我的图表正在通过
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
})