Интервалы Angular2 с наблюдаемым в ионном компоненте изнутри - PullRequest
0 голосов
/ 20 ноября 2018

У меня проблемы с попыткой заставить угловые интервалы работать внутри ионного компонента, который также находится внутри страницы.

Я определил интервал следующим образом:

getDataEvery(seconds: number) {
    this.timer = Observable.timer(0, seconds * 1000);
    this.timer
        .takeWhile(() => this.alive)
        .subscribe(() => {
            this.getData();
        });
}

Но,так как это внутри компонента, а не непосредственно на странице, я не могу использовать событие ionViewWillLeave, чтобы установить для this.alive значение false, поэтому я делаю это с подпиской, например:

this.subscription = this.viewChangeMessenger.getMessage().subscribe(data => {
    if (data) {
        this.alive = false;
    }
});

, когда я меняю представление, вызывается функция getMessage, а затем я устанавливаю в состояние false значение false, чтобы отписаться от интервала, теперь проблема возникает, когда я возвращаюсь на главную страницу.Из-за того, как Ionic управляет представлениями, домашняя страница не уничтожается, все виды перемещаются поверх нее, а также их всплывают, чтобы снова вернуться в Home, учитывая, что код, который я использую для отмены подписки на других страницах, не будет работать, потому что конструктор (где для переменной live установлено значение 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 будет иметь двух подписчиков, затем трех и так далее, что приведет к утечке памяти.

Любое предложение по этому делу?

Спасибо.

...