我在尝试使角度间隔在Ionic组件(也位于页面内)内部工作时遇到问题。
我这样定义间隔:
getDataEvery(seconds: number) {
this.timer = Observable.timer(0, seconds * 1000);
this.timer
.takeWhile(() => this.alive)
.subscribe(() => {
this.getData();
});
}
但是,因为这是在组件内部,而不是直接在页面上,所以我无法使用ionViewWillLeave事件将this.alive设置为false,因此我正在使用Subscription进行操作,如下所示:
this.subscription = this.viewChangeMessenger.getMessage().subscribe(data => {
if (data) {
this.alive = false;
}
});
因此,当我更改视图时,将触发getMessage函数,然后将lively设置为false以便取消订阅该间隔,现在,当我返回主页时出现了问题。由于Ionic管理视图的方式,主页没有被破坏,所有视图都没有被推入,并且它们也弹出以再次回到主页,考虑到我用于取消订阅其他页面的代码将不起作用,因为当我转到首页时,不会再次执行构造函数(其中alive变量设置为true),因此我在此处使用以下代码:
this.subscription = this.viewChangeMessenger.getMessage().subscribe(data => {
if (data) {
if (data == "Home") {
this.alive = true;
this.getDataEvery(5);
} else {
this.alive = false;
}
}
});
此代码的问题是,每次我回到首页时,都会为this.timer设置一个新订阅,因此,如果更改页面并返回首页,则this.timer将有两个订阅者,然后是三个订阅者等等,这将导致内存泄漏。
对此案有任何建议吗?
谢谢。