Angular2间隔,在离子组件内部视图中可观察

时间:2018-11-20 06:06:18

标签: angular ionic3 observable

我在尝试使角度间隔在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将有两个订阅者,然后是三个订阅者等等,这将导致内存泄漏。

对此案有任何建议吗?

谢谢。

0 个答案:

没有答案