How to handle back button on Ionic 2

前端 未结 12 1550
野的像风
野的像风 2020-11-29 04:04

How can I handle the back button action on Ionic 2?

I want to be able to know what to do depending on which page is being shown to the user.

I didn\'t find a

12条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-29 04:45

    you can try this functions :

    registerBackButton() {
            this.platform.registerBackButtonAction(() => {
                if (this.menu.isOpen()) {
                    console.log("Menu is open!", "loggedInMenu");
                    this.menu.close();
                    console.log("this.menu.isOpen(): " + JSON.stringify(this.menu.isOpen()));
                    return;
                }
                console.log("Checking for other pages");
    
                let checkHomePage = true;
                let max = Globals.navCtrls.length;
                for (let i = 0; i < Globals.navCtrls.length; i++) {
                    let n = Globals.navCtrls[i];
                    if (n) {
                        if (n.canGoBack()) {
                            console.log("Breaking the loop i: " + JSON.stringify(i));
                            let navParams = n.getActive().getNavParams();
                            if (navParams) {
                                console.log("navParams exists");
                                let resolve = navParams.get("resolve");
                                if (resolve) {
                                    n.pop().then(() => resolve({}));
                                } else {
                                    n.pop();
                                }
                            } else {
                                n.pop();
                            }
                            checkHomePage = false;
                            return;
                        }
                    } else console.log("n was null!");
                }
    
                if (this.nav.getActive().instance instanceof TabsPage && !this.nav.canGoBack()) {
                    let popPageVal = this.backbuttonService.popPage();
                    console.log("popPageVal: " + JSON.stringify(popPageVal));
                    if (popPageVal >= 0) {
                        console.log("Switching the tab to: ", popPageVal);
                        this.switchTab(popPageVal);
                    } else {
                        console.log("Last page is HomePage");
    
                        if (this.alert) {
                            this.alert.dismiss();
                            this.alert = null;
                        } else {
                            this.showAlert();
                        }
                    }
                } else {
                    console.log("Last page is not HomePage");
                    if (this.nav.canGoBack()) {
                        console.log("We can go back!");
                        this.nav.pop();
                    }
                }
            });
        }
    
        showAlert() {
            this.alert = this.alertController.create({
                title: "Exit?",
                message: "Are you sure you want to exit?",
                buttons: [
                    {
                        text: "Cancel",
                        role: "cancel",
                        handler: () => {
                            this.alert = null;
                        }
                    },
                    {
                        text: "Exit",
                        handler: () => {
                            this.platform.exitApp();
                        }
                    }
                ]
            });
            this.alert.present();
        }
    
        switchTab(tabIndex) {
            if (Globals.tabs && tabIndex >= 0) {
                console.log("Switch condition met");
                Globals.tabIndex = tabIndex;
                Globals.tabs.select(tabIndex);
                Globals.tabs.selectedIndex = tabIndex;
            }
        }
    

    I hope its works with you.

提交回复
热议问题