У меня проблемы с попыткой заставить угловые интервалы работать внутри ионного компонента, который также находится внутри страницы.
Я определил интервал следующим образом:
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 будет иметь двух подписчиков, затем трех и так далее, что приведет к утечке памяти.
Любое предложение по этому делу?
Спасибо.