基本上,我有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"
中,则可以使用,但是如果用户在欢迎屏幕上打开了模式(通过按下注册按钮)并关闭了该模式,而无需提交注册表格,请转到回到欢迎屏幕,按登录按钮并登录,然后我将收到错误消息:
错误:未捕获(承诺):覆盖不存在
当然会发生这种情况,因为我是主页时正在关闭模式,而没有检查模式是否已打开。
任何帮助都将不胜感激,我已经坚持了一段时间……
答案 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()之后清除其值。