我希望处理硬件后退按钮,我需要获取当前视图的名称。
console.log(this.nav.getActive());
console.log(this.navCtrl.getActive().component.name);
这只返回设备上的字母 t,但在浏览器中确实有效。
请让我知道如何在设备上获取页面/视图名称以处理后退按钮
问题是 webpack 在设备上运行应用程序时会
缩小代码(我猜是 --prod 标志(,这就是为什么在浏览器上工作时名称正确,但在设备上运行应用程序时t
显示为名称。为了避免这种情况,您可以使用instanceof
运算符来检查页面是否是您正在寻找的页面来执行某些操作。
这是我在我处理过的其中一个应用程序中处理后退按钮的方式:
this.platform.registerBackButtonAction(() => {
this.handleBackButton();
});
然后
private handleBackButton(): void {
// Prevent to dismiss a modal when another modal is being dismissed
let ready = true;
let activePortal = this.ionicApp._loadingPortal.getActive() ||
this.ionicApp._modalPortal.getActive() ||
this.ionicApp._toastPortal.getActive() ||
this.ionicApp._overlayPortal.getActive();
if (activePortal) {
ready = false;
activePortal.dismiss();
activePortal.onDidDismiss(() => { ready = true; });
return;
}
if (this.menuCtrl.isOpen()) {
this.menuCtrl.close();
return;
}
let view = this.navCtrl.getActive();
let page = view ? this.navCtrl.getActive().instance : null;
if (page && (page instanceof HomePage || page instanceof SignInPage)) {
this.platform.exitApp();
}
else if (this.navCtrl.canGoBack() || view && view.isOverlay) {
this.navCtrl.pop();
} else {
this.accountService.isLoggedIn() ? this.navCtrl.setRoot(HomePage) : this.navCtrl.setRoot(SignInPage);
}
}
正如您在代码中看到的,我使用 instanceof
运算符检查视图是否为特定视图
page instanceof HomePage
这样,即使 webpack 缩小了代码,它也应该可以工作。