我需要关闭所有当前的模式弹出窗口,并在设备进入空闲状态时在离子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()可能被调用了太多次。
并且不会关闭任何弹出窗口。谁知道怎么做?
答案 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();
}
}