【问题标题】:How to dismiss all popups at the platform resume?如何关闭平台简历中的所有弹出窗口?
【发布时间】:2017-04-10 07:03:04
【问题描述】:

在我的应用程序中,我有这个警报:

let confirm = this.alertCtrl.create({
                    title: 'Blabla',
                    message: 'blablabla',
                    buttons: [button1, button2, button3],
                    enableBackdropDismiss: false
                });
                confirm.present();

此外,当应用程序恢复时,应用程序应重定向到登录页面。完成这项工作没有问题。

问题来了,当我打开弹出窗口并恢复应用程序时。应用程序确实重定向正确,但弹出窗口仍然打开。

是否有解决方案以编程方式关闭所有打开的弹出窗口?从 app.component 调用 resume 函数:

this.platform.resume.subscribe(() => {});

因此,我无法调用确认变量并关闭此弹出窗口。

【问题讨论】:

  • 您可以从不同的地方订阅同一个事件。因此,您可以从可以访问您的confirm 变量的组件中调用this.platform.resume.subscribe(() => {});
  • 好吧,你是对的,这是一个解决方案!问题是每次我在应用程序中打开警报时都必须这样做......

标签: angular ionic-framework ionic2


【解决方案1】:

Sabari's method 有效!我目前正在我的组件中实现方法,以允许应用在用户按下设备的后退按钮时返回其步骤,但是 AlertController、AlertSheetController 和类似的实例存在问题。

与他的解决方案相比,我所做的唯一更改是实现了一个名为 logoutStarted 的布尔值,只要 AlertController 显示警报,它就会变为 true。

if (this.alerts.length > 0 || this.logoutStarted) { 
        this.alerts.forEach(i => {
            i.dismiss();
            this.alerts = [];
            this.logoutStarted = false;
        });
      }

这样做,我能够从方法中关闭警报:

this.platform.registerBackButtonAction(() =>{}

【讨论】:

    【解决方案2】:

    您可以从不同的地方订阅同一个活动。因此,您可以从可以访问您的confirm 变量的组件中调用this.platform.resume.subscribe(() => {});

    【讨论】:

    • 你为什么不做一个提供者来提醒。仅在该提供程序中编写一次 subscribe() 方法。每当您必须创建警报时,您都将使用该提供程序来执行此操作。
    【解决方案3】:

    通过调用 presentAlert() 方法从公共页面(提供者)打开警报。

    并且在onresume订阅中,调用dismissAlert()方法关闭所有打开的alert。

    alerts: Alert[] = [];
    
     presentAlert() {
            let confirm = this.alertCtrl.create({
                title: 'Blabla',
                message: 'blablabla',
                buttons: [button1, button2, button3],
                enableBackdropDismiss: false
            });
            this.alerts.push(confirm);
            confirm.present();
        }
    
        dismissAlert() {
            console.log('Dismissed alert');
            if (this.alerts.length) {
                this.alerts.forEach(e => {
                    e.dismiss();
                });
            }
            this.alerts = [];
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多