我希望处理硬件后退按钮,我需要获取当前视图的名称。
console.log(this.nav.getActive());
console.log(this.navCtrl.getActive().component.name);
这只返回设备上的字母t,但在浏览器中有效。
请告诉我如何在设备上获取用于处理后退按钮的页面/视图名称
答案 0 :(得分:1)
问题是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
这样即使webpacks缩小代码也应该有效。