0

我的应用程序导航是这样的:

  • 登录页面(设置为 Root)
  • TabsPage(设置为Root,登录成功后)
    • ListPage(离子标签根)
      • FilterPage(以模式打开)
      • DetailsPage(页面被推送)
    • SearchPage(离子标签根)
    • SettingsPage(离子标签根)
      • 历史(页面被推送)
        • HistoryDe​​tailsPage(页面被推送)

问题有点像这个问题。但这对我没有帮助。

问题:

每当我从推送的页面或 ion-tab 根页面按下硬件后退按钮时,我只会在 app.component.ts 的后退按钮事件中看到 nav.getViews() 的 ["TabsPage"]。如何在该全局后退按钮事件中获取 Pushed Page 的名称?

参考代码:

app.component.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();
    }
  }
}
4

1 回答 1

1

您不会得到页面的名称。

registerBackButtonAction 不返回页面的名称,它返回实例。因此,如果要查找页面,则必须在 app.component.ts 中实例化该页面的实例,然后将其与返回的值进行比较。

我还建议不要使用依赖页面名称的代码,因为名称会在生产构建中丢失。在生产版本中缩小代码时,名称也会缩小,例如,名称 HomePage 将变为 a。这将导致您的代码在生产中中断。

于 2020-09-25T05:18:03.517 回答