当我从该页面导航到另一个页面时,我需要停止Observable.timer。 下面是我在项目中使用的代码。
import { Component, ChangeDetectorRef, OnDestroy } from '@angular/core';
import { NavController, MenuController } from 'ionic-angular';
import {Observable, Subject}from 'RxJs/Rx';
export class SettingsPage extends BasePage implements OnDestroy {
ionViewDidLoad() {
let initial: boolean = true;
this.serverUrlStream
.debounce((val)=> Observable.timer(initial ? 0 : 500))
.switchMap(val => {
this.canLeave = false;
this.apiClientService.ocServiceUrl = val;
return Observable.fromPromise(this.apiClientService.getHospitals());
})
.catch((err, caught)=>{
console.log(err);
return caught; // Continue after error
})
.subscribe((hospitals: Hospital[]) => {
this.hospitals = hospitals;
if (hospitals.length > 0) {
this.settings.hospitalInstallId = hospitals[0].InstallId;
this.canLeave = true;
this.cd.detectChanges();
}
});
this.serverUrlStream.next(this.settings.serverUrl);
initial = false;
}
//I tried like below to stop the timer when I left from this page.
ngOnDestroy(){
this.serverUrlStream.unsubscribe();
}
}
以上代码无效仍然ajax调用每5秒运行一次。任何人都可以帮助我在用户离开当前页面时停止Observable.timer
答案 0 :(得分:1)
您在ngOnDestroy
取消订阅的方法是正确的。你的语法略有错误。
首先需要将实际订阅分配给变量,如下所示
this.serverUrlSubscription = this.serverUrlStream.debounce(...)...subscribe(...);
您应该首先将serverUrlSubscription: Subscription;
声明为您班级的成员(Subscription
类型可以从rxjs/Subscription
导入。)
然后,您只需在this.serverUrlSubscription.unsubscribe();
中执行ngOnDestroy
即可分离并销毁订阅。
第二种方法是在takeUntil(this.router.events.filter((event) => event instanceof NavigationStart)
运算符之后使用switchMap
,首先必须将角度路由器注入this.router
。
但我建议您使用ngOnDestroy
。