我的应用程序导航如下:
- 登录页面(设置为根(
- TabsPage(设置为Root,一旦登录成功(
- ListPage(离子选项卡根目录(
- FilterPage(以模态打开(
- DetailsPage(推送页面(
- SearchPage(离子选项卡根目录(
- 设置页面(离子选项卡根目录(
- 历史记录(页面被推送(
- 历史细节页面(推送页面(
- 历史记录(页面被推送(
- ListPage(离子选项卡根目录(
问题和这个问题差不多。但这对我没有帮助。
问题:
每当我从pushed Pages或ion选项卡根页面中按下硬件后退按钮时,我在app.component.ts的后退按钮事件中只看到nav.getViews((的[quot;TabsPage"]。如何在全局后退按钮事件下获得pushed Page的名称?
参考代码:
应用程序组件.ts:
constructor(..., private platform: Platform,private modalCtrl: ModalController,private ionicApp: IonicApp,private app: App, ...) {
// ...
this.registerAction();
}
registerAction(): void {
if (this.platform.is("android")) {
this.unRegisterBackButtonAction = this.platform.registerBackButtonAction(
(event) => {
this.backButtonClick();
}
);
}
}
backButtonClick() {
let views = this.nav.getViews().map(x => x.name);
console.log(JSON.stringify(views)); // ALWAYS SHOWS ["TabsPage"], not the actual page (eg: "DetailsPage")
let activePortal = this.ionicApp._loadingPortal.getActive() ||
this.ionicApp._modalPortal.getActive() ||
this.ionicApp._overlayPortal.getActive();
if (activePortal) {
activePortal.dismiss();
}
else if(this.nav.canGoBack()) {
this.nav.pop();
} else {
if (new Date().getTime() - this.lastTimeBackPress < this.timePeriodToExit) {
this.platform.exitApp(); //Exit from app
} else {
this.alerts.showToast("Press back button again to exit");
this.lastTimeBackPress = new Date().getTime();
}
}
}
您将无法获得页面的名称。
registerBackButtonAction不返回页面的名称,而是返回实例。因此,如果你想找到这个页面,你必须在app.component.ts&然后将其与返回的值进行比较。
我还建议不要使用依赖于页面名称的代码,因为这些名称将在生产构建中丢失。当代码在生产版本中被缩小时,名称也会被缩小,例如,名称主页将变为a。这将导致代码在生产中中断。