如何关闭所有离子2模态?

时间:2017-06-13 11:58:05

标签: javascript ionic2 angular2-template

我需要关闭所有当前的模式弹出窗口,并在设备进入空闲状态时在离子2应用程序中注销用户。

我使用以下方法关闭主页组件中的弹出窗口。

this.viewController.dismiss().then(_ => {
  console.log("modal dismiss");
}).catch(error => {
  console.log(error)
});

this.navController.popAll().then(_ => {
  console.log("modal dismiss");
}).catch(error => {
 console.log(error);
})

但它会引发跟随错误 您无法删除导航堆栈中的所有页面。 nav.pop()可能被调用了太多次。

并且不会关闭任何弹出窗口。谁知道怎么做?

4 个答案:

答案 0 :(得分:4)

viewController.dismiss()仅关闭current Modal。这意味着您必须保留对所有打开模态的引用,并在每个模式上调用dismiss()

您可以设置使用navController.setRoot(LoginPage)link)来显示登录页面。

答案 1 :(得分:2)

这对我有用

  constructor(public navCtrl: NavController,public ionicApp: IonicApp){} 

  this.viewCtrl.dismiss().then(_=>{
  let activePortal = this.ionicApp._modalPortal.getActive()
  if (activePortal) {
    activePortal.dismiss(); //can use another .then here
  }
});

答案 2 :(得分:0)

我们可以创建一个递归函数,该函数采用当前活动的模态引用,然后关闭该模态,然后在dismiss()事件中再次调用该函数。这是代码,

递归函数

public dismissAllModal () {
        let activeModal = this.ionicApp._modalPortal.getActive();
        if (activeModal) {
            activeModal.dismiss().then(() => {
                this.dismissAllModal()
            });
        }
    }

在应删除所有模态的位置调用函数(我将其放置在构造函数的登录页面中)

this.viewCtrl.dismiss().then(_ => {
            this.dismissAllModal()
        })

答案 3 :(得分:0)

好,所以我遇到了同样的问题,我用这种方法解决了。解决方案是使用服务将所有模式实例存储在数组中。然后使用循环并从该数组中消除所有引用它们的模态。

modal.html

    <ion-button (click)="openModal()"> Open Modal <ion-button>
    <ion-button (click)="close()"> Close Modals <ion-button>

modal.service.ts

modalInst=[];
i=0;

storeModal(x)
{
       this.modalInst[this.i]=x;
       this.i++;
}

modal.ts

openModal()
{
    var modal = await this.viewCtrl.create({
    component: ModalPage
   });

 this.service.storeModal(modal);// storing modal instances in an array
   return await modal.present();
}

close()
    {
        for(var i=0; i< this.service.modalInst.length; i++)
         {
            this.service.modalInst[i].dismiss();
         }
    }