Как закрыть SideMenu и закрыть приложение на Ionic с помощью кнопки? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь создать код, который нажимает аппаратную кнопку backButton на устройстве, определяет, открыто ли боковое меню, и затем закрывает его, или, если он не открыт, вернитесь, если можете, или закройте приложение.

this.platform.backButton.subscribe(() => {
    if ( this.menu.isOpen () ) {
        this.menu.close ();
    } else if ( this.routerOutlet && this.routerOutlet.canGoBack () ) {
        this.routerOutlet.pop ();
    } else {
        navigator['app'].exitApp ();
   }
});

Код с menu.close работает нормально, приложение закрывается или возвращается.Но когда я вставляю menu.close, закройте только боковое меню, но не закрывайте приложение и не возвращайтесь.

1 Ответ

0 голосов
/ 03 апреля 2019

Попробуйте следующий код, он работает для меня

    @ViewChildren(IonRouterOutlet) routerOutlets: QueryList<IonRouterOutlet>;

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: ToastController) {
        this.initializeApp();

    }

initializeApp() {
        this.platform.ready().then(() => {
            this.statusBar.styleDefault();
            this.splashScreen.hide();
            this.backButtonEvent();
        });

    }

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 !== null) {
                    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.showToast();
                        this.lastTimeBackPress = new Date().getTime();
                    }
                }
            });
        });
    }

    async showToast() {
        let toast = await this.toast.create({
            message: `Press back again to exit App.`,
            duration: 2000,
            position: 'middle'
        });
        toast.present();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...