在 ionic 2/3 中获取相同模态的多个实例

Getting multiple instance of same modal in ionic 2/3

在我的 app.component 中,我有一个后台模式服务,当通过 intent 共享时,它会向行为 Subject

抛出值
this._notification.setNotiService2(data.extras);

登录后,我将根设置为 TabsPage

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

在选项卡页面上,我已经订阅了行为主题,所以每当我获得一个共享对象时,我都会处理它并打开一个显示所需值的模式。 最初,当应用程序打开时,一切正常。但是一旦我们 login/logout 问题就出现了。注销时,我将根页面设置为登录页面。

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

然后在成功登录后再次将 root 设置为 Tabs Page

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

现在,如果我通过 Intent 共享值,Modal 的多个实例将以完全相同的值打开。 我已检查行为主题是否为 null/undefined,但订阅值仅为 Ok only。从 TabsPage 内的行为主题记录值,我发现同一个函数(订阅的行为主题)被调用了两次。

同样,如果我 logout/login 模态框打开 3 次,并且数量继续相应增长。

在我看来,您没有记得取消订阅,这意味着每次订阅都会增加。因此,每当您离开页面时,请记住取消订阅(所有)您的订阅。由于您使用的是 Ionic,因此 ionViewWillLeave 挂钩将是取消订阅的合适位置...因此在您的页面上声明一个新订阅并...

import { Subscription } from 'rxjs/Subscription';

// ...

mySubscription = new Subscription();

// ...

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

// ...  

ionViewWillLeave() { 
  this.mySubscription.unsubscribe();
}