Ionic v4-检查模式是否已打开

时间:2019-04-05 23:24:10

标签: angular ionic4

基本上,我有2个按钮的欢迎页面;登录并注册。当用户单击“注册”按钮时,将打开一个模式,显示注册表格。我实施了一种逻辑,使用户在注册时登录,并且还存在一种逻辑,当用户通过身份验证时,该逻辑会将用户带到主页。

这意味着,当用户提交注册表格并登录时,必须取消显示模式,但是显示主页后仅。否则,如果我在此之前关闭模式,那么用户将再次看到欢迎屏幕,并且我想避免这种行为。我可以在注册时轻松撤消该模式,但是正如我所说,我不希望用户再次看到欢迎屏幕。

这就是我在 welcome.ts

中打开模式的方式
async showModal() {
    const modal = await this.modalController.create({
      component: RegisterPage
    });
    return modal.present();
  }

register.ts 中,我需要一种方法来了解模式是否仍处于打开状态,以便可以使用以下逻辑:

constructor(
    private modalController: ModalController,
    private router: Router
  ) {
    this.router.events.subscribe(() => {
      if (router.url.toString() === "/tabs/home" && isModalOpened) this.modalController.dismiss();
    });
  }

如果我仅将其添加到if语句router.url.toString() === "/tabs/home"中,则可以使用,但是如果用户在欢迎屏幕上打开了模式(通过按下注册按钮)并关闭了该模式,而无需提交注册表格,请转到回到欢迎屏幕,按登录按钮并登录,然后我将收到错误消息:

  

错误:未捕获(承诺):覆盖不存在

当然会发生这种情况,因为我是主页时正在关闭模式,而没有检查模式是否已打开。

任何帮助都将不胜感激,我已经坚持了一段时间……

2 个答案:

答案 0 :(得分:0)

您可以调用this.modalCtrl.getTop();函数。如果未定义,则表示未通过Modal Controller实例调用该组件。您可以像这样重构代码:

constructor(
    private modalController: ModalController,
    private router: Router
  ) {
    this.router.events.subscribe(async () => {
      const isModalOpened = await this.modalController.getTop();
      if (router.url.toString() === "/tabs/home" && isModalOpened) this.modalController.dismiss();
    });
  }

答案 1 :(得分:0)

您可以像这样使用它;

async showModal() {
    this.modal = await this.modalController.create({
      component: RegisterPage
    });
    return this.modal.present();
}

并检查任何地方

if (this.modal) {
  this.modalController.dismiss();
}

如果您的情况需要,请在dismiss()之后清除其值。