如何解除平台恢复中的所有弹出窗口?

时间:2017-04-10 07:03:05

标签: angular ionic-framework ionic2

在我的申请中,我有这个警告:

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变量并关闭此弹出窗口。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我无法对Sabari的答案发表评论,因为我的代表还不够高,但是我可以确认他的方法有效。我目前正在我的组件中实现方法,以允许应用程序在用户按下设备的“后退”按钮时返回其上一步,但是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 :(得分:0)

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

在onresume订阅中,调用dismissAlert()方法关闭所有已打开的警报。

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 = [];
    }