Handling hardware back button in Ionic3 Vs Ionic4

前端 未结 6 1584
悲哀的现实
悲哀的现实 2020-12-01 09:30

Please find the below code for the Android hardware back button action in ionic3. As Ionic4 uses angular routing for navigation how the pop event w

6条回答
  •  执笔经年
    2020-12-01 10:16

    Try This: app.comonent.ts

    import { Component, ViewChildren, QueryList } from '@angular/core';
    import { Platform, ModalController, ActionSheetController, PopoverController, IonRouterOutlet, MenuController } from '@ionic/angular';
    import { SplashScreen } from '@ionic-native/splash-screen/ngx';
    import { StatusBar } from '@ionic-native/status-bar/ngx';
    import { Router } from '@angular/router';
    import { Toast } from '@ionic-native/toast/ngx';
    
    @Component({
        selector: 'app-root',
        templateUrl: 'app.component.html'
    })
    export class AppComponent {
    
        // set up hardware back button event.
        lastTimeBackPress = 0;
        timePeriodToExit = 2000;
    
        @ViewChildren(IonRouterOutlet) routerOutlets: QueryList;
    
        constructor(
            private platform: Platform,
            private splashScreen: SplashScreen,
            private statusBar: StatusBar,
            public modalCtrl: ModalController,
            private menu: MenuController,
            private actionSheetCtrl: ActionSheetController,
            private popoverCtrl: PopoverController,
            private router: Router,
            private toast: Toast) {
    
            // Initialize app
            this.initializeApp();
    
            // Initialize BackButton Eevent.
            this.backButtonEvent();
        }
    
        // active hardware back button
        backButtonEvent() {
            this.platform.backButton.subscribe(async () => {
                // close action sheet
                try {
                    const element = await this.actionSheetCtrl.getTop();
                    if (element) {
                        element.dismiss();
                        return;
                    }
                } catch (error) {
                }
    
                // close popover
                try {
                    const element = await this.popoverCtrl.getTop();
                    if (element) {
                        element.dismiss();
                        return;
                    }
                } catch (error) {
                }
    
                // close modal
                try {
                    const element = await this.modalCtrl.getTop();
                    if (element) {
                        element.dismiss();
                        return;
                    }
                } catch (error) {
                    console.log(error);
    
                }
    
                // close side menua
                try {
                    const element = await this.menu.getOpen();
                    if (element) {
                        this.menu.close();
                        return;
    
                    }
    
                } catch (error) {
    
                }
    
                this.routerOutlets.forEach((outlet: IonRouterOutlet) => {
                    if (outlet && outlet.canGoBack()) {
                        outlet.pop();
    
                    } else if (this.router.url === '/home') {
                        if (new Date().getTime() - this.lastTimeBackPress < this.timePeriodToExit) {
                            // this.platform.exitApp(); // Exit from app
                            navigator['app'].exitApp(); // work in ionic 4
    
                        } else {
                            this.toast.show(
                                `Press back again to exit App.`,
                                '2000',
                                'center')
                                .subscribe(toast => {
                                    // console.log(JSON.stringify(toast));
                                });
                            this.lastTimeBackPress = new Date().getTime();
                        }
                    }
                });
            });
        }
    }
    

    it's work for me, in ionic v4 beta

提交回复
热议问题