Получение нескольких экземпляров одного и того же модала в ionic 2/3

Внутри моего app.component у меня есть служба фонового режима, которая при совместном использовании через намерение передает значение поведению Subject

this._notification.setNotiService2(data.extras);

После входа в систему я устанавливаю корень на TabsPage

this.appCtrl.getRootNav().setRoot('TabsPage');

На странице вкладок я подписался на тему поведения, поэтому всякий раз, когда я получаю общий объект, я обрабатываю его и открываю модальное окно, отображающее требуемые значения. Изначально, когда приложение открывается, все работает нормально. Но как только мы входим/выходим из системы, возникает проблема. При выходе из системы я устанавливаю корневую страницу в качестве страницы входа.

this.appCtrl.getRootNav().setRoot('LoginPage');

Затем снова при успешном входе в систему установите root на страницу вкладок.

 this.appCtrl.getRootNav().setRoot('TabsPage');

Теперь снова, если я делюсь значениями через намерение, несколько экземпляров модального окна открываются с одинаковыми значениями. Я проверил предмет поведения как null/undefined, но подписанное значение - только Ok. Записав значение из темы поведения внутри TabsPage, я обнаружил, что одна и та же функция (тема поведения по подписке) вызывается дважды.

Опять же, если я выхожу из системы / вхожу в систему, модальное окно открывается 3 раза, и число продолжает соответственно расти.


person rajit    schedule 27.03.2018    source источник


Ответы (1)


Мне кажется, что вы не помните об отписке, а это значит, что подписки каждый раз увеличиваются. Поэтому всякий раз, когда вы покидаете страницу, не забудьте отказаться от (всех) ваших подписок. Поскольку вы используете Ionic, хук ionViewWillLeave будет подходящим местом для отказа от подписки... поэтому объявите новую подписку на своей странице и...

import { Subscription } from 'rxjs/Subscription';

// ...

mySubscription = new Subscription();

// ...

this.mySubscription = this.myService.mySubject.subscribe(....)

// ...  

ionViewWillLeave() { 
  this.mySubscription.unsubscribe();
}
person AJT82    schedule 27.03.2018