Rag*_*hav 8 ionic-framework angular ionic4
我正在使用Ionic 4应用程序,当用户在移动后退按钮上单击2次时,它应关闭该应用程序,但这没有发生。
这是我的app.component.ts:
lastTimeBackPress = 0;
timePeriodToExit = 2000;
@ViewChildren(IonRouterOutlet) routerOutlets: QueryList<IonRouterOutlet>;
constructor(){
this.backButtonEvent();
}
backButtonEvent() {
document.addEventListener("backbutton", () => {
this.routerOutlets.forEach((outlet: IonRouterOutlet) => {
if (outlet && outlet.canGoBack()) {
outlet.pop();
} else if (this.router.url === '/tabs/tab1') {
if (new Date().getTime() - this.lastTimeBackPress < this.timePeriodToExit) {
navigator['app'].exitApp(); //Exit from app
} else {
this.presentAlertConfirm();
this.lastTimeBackPress = new Date().getTime();
}
// navigator['app'].exitApp(); // work for ionic 4
}
});
});
}
async presentAlertConfirm() {
const alert = await this.alertController.create({
// header: 'Confirm!',
message: 'Are you sure you want to exit the app?',
buttons: [
{
text: 'Cancel',
role: 'cancel',
cssClass: 'secondary',
handler: (blah) => {
}
}, {
text: 'Close App',
handler: () => {
navigator['app'].exitApp();
}
}
]
});
await alert.present();
}
Run Code Online (Sandbox Code Playgroud)
当我在首页(Tab1)上并且在其他选项卡上时,此功能无法正常工作且无法转到首页。
我认为问题出在我(outlet && outlet.canGoBack())因为这不起作用。我正在使用选项卡主题,并且当用户没有其他选项卡并单击硬件后退按钮时,是否可以将路由发送到主选项卡。
我正在使用Ionic 4标签主题。
任何帮助深表感谢。
这样做。
constructor(private platform: Platform) {
this.platform.backButton.subscribe(() => {
});
}
Run Code Online (Sandbox Code Playgroud)
为了回应@Raghav 的评论,我会这样尝试:
lastTimeBackPress = 0;
timePeriodToExit = 2000;
@ViewChildren(IonRouterOutlet) routerOutlets: QueryList < IonRouterOutlet > ;
constructor(private platform: Platform) {
this.backButtonEvent();
}
backButtonEvent() {
this.platform.backButton.subscribeWithPriority(0, () => {
this.routerOutlets.forEach(async(outlet: IonRouterOutlet) => {
if (this.router.url != '/tabs/tab1') {
await this.router.navigate(['/tabs/tab1']);
} else if (this.router.url === '/tabs/tab1') {
if (new Date().getTime() - this.lastTimeBackPress >= this.timePeriodToExit) {
this.lastTimeBackPress = new Date().getTime();
this.presentAlertConfirm();
} else {
navigator['app'].exitApp();
}
}
});
});
}
async presentAlertConfirm() {
const alert = await this.alertController.create({
// header: 'Confirm!',
message: 'Are you sure you want to exit the app?',
buttons: [{
text: 'Cancel',
role: 'cancel',
cssClass: 'secondary',
handler: (blah) => {}
}, {
text: 'Close App',
handler: () => {
navigator['app'].exitApp();
}
}]
});
await alert.present();
}Run Code Online (Sandbox Code Playgroud)
小智 5
那是因为您在平台准备就绪之前调用了 registerBackButtonAction。平台准备好后,您必须订阅后退按钮。一个接近:
this.platform.ready().then(
() => {
this.platform.registerBackButtonAction(() => {
this.platform.exitApp();
});
}
);
Run Code Online (Sandbox Code Playgroud)
尝试这个:
lastTimeBackPress = 0;
timePeriodToExit = 2000;
@ViewChildren(IonRouterOutlet) routerOutlets: QueryList < IonRouterOutlet > ;
backButtonEvent() {
document.addEventListener("backbutton", async() => {
try {
const element = await this.modalCtrl.getTop();
if (element) {
element.dismiss();
return;
}
} catch (error) {
console.log(error);
}
this.routerOutlets.forEach(async(outlet: IonRouterOutlet) => {
if (this.router.url != '/tabs/tab1') {
await this.router.navigate(['/tabs/tab1']);
} else if (this.router.url === '/tabs/tab1') {
if (new Date().getTime() - this.lastTimeBackPress >= this.timePeriodToExit) {
await this.presentAlertConfirm();
this.lastTimeBackPress = new Date().getTime();
}
navigator['app'].exitApp(); // work for ionic 4
}
});
});
}Run Code Online (Sandbox Code Playgroud)
并在构造函数中调用此函数。这解决了我的问题,因为我正在使用选项卡主题,outlet.pop();但无法正常工作。所以我尝试了这种方法。
| 归档时间: |
|
| 查看次数: |
5074 次 |
| 最近记录: |