在RC0中获取当前页面/视图名称返回“t”

时间:2017-06-15 08:14:49

标签: angular typescript ionic2 ionic3

我希望处理硬件后退按钮,我需要获取当前视图的名称。

console.log(this.nav.getActive());
 console.log(this.navCtrl.getActive().component.name);

这只返回设备上的字母t,但在浏览器中有效。

请告诉我如何在设备上获取用于处理后退按钮的页面/视图名称

1 个答案:

答案 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缩小代码也应该有效。