Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Ionic v4-检查模态是否打开_Angular_Ionic4 - Fatal编程技术网

Angular Ionic v4-检查模态是否打开

Angular Ionic v4-检查模态是否打开,angular,ionic4,Angular,Ionic4,基本上我有两个按钮欢迎页面;登录并注册。当用户单击“注册”按钮时,将打开一个显示注册表单的模式。我实现了一个在注册时登录用户的逻辑,还有一个在用户通过身份验证时将用户带到主页的逻辑 这意味着,当用户提交注册表并登录时,该模式必须被取消,但仅在显示主页后才可以。否则,如果在此之前关闭模式,那么用户将再次看到欢迎屏幕,我希望避免这种行为。我可以很容易地在注册时取消模式,但正如我所说的,我不希望用户再次看到欢迎屏幕 这就是我在欢迎中打开模式的方式。ts async showModal() {

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

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

这就是我在欢迎中打开模式的方式。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”
中,它会工作,但是如果用户从欢迎屏幕打开模式(通过按注册按钮)并关闭模式,而不提交注册表单,返回欢迎屏幕,按登录按钮并登录,那么我将得到一个错误:

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

当然,发生这种情况是因为当我是主页上的管理员时,我会取消模式,而不检查模式是否打开


非常感谢您提供的任何帮助,我已经坚持了一段时间了…

您可以调用
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 showModal() {
    this.modal = await this.modalController.create({
      component: RegisterPage
    });
    return this.modal.present();
}
检查任何地方

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

如果您的案例需要,您应该在dismise()之后清除其值。

在这种情况下,
async
不会返回确切的当前路由