【问题标题】:Ionic v4 - check if modal is openedIonic v4 - 检查模态是否打开
【发布时间】:2019-04-05 23:24:10
【问题描述】:

基本上我有带有 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" 它可以工作,但如果用户从欢迎屏幕打开模式(通过按下注册按钮)并在不提交注册表的情况下关闭它,返回欢迎界面,按登录按钮并登录,然后我会得到一个错误:

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

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

非常感谢任何帮助,我已经被这个问题困扰了一段时间......

【问题讨论】:

    标签: angular ionic4


    【解决方案1】:

    您可以调用this.modalCtrl.getTop(); 函数。如果未定义,则表示该组件不是通过模态控制器实例调用的。你可以重构你的代码:

    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();
        });
      }
    

    【讨论】:

    • 在这种情况下,async 不会返回您当前的确切路线
    【解决方案2】:

    你可以这样使用它;

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

    并检查任何地方

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

    如果你的情况需要,你应该在 dismiss() 之后清除它的值。

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2017-05-26
      • 2012-08-03
      相关资源
      最近更新 更多