Ionic 4 Android аппаратная кнопка возврата перестает работать после перехвата NavigationStart и перенаправления через Router.navigateByUrl - PullRequest
0 голосов
/ 13 мая 2019

У меня есть приложение Ionic 4, где у меня есть служба, в которой я перехватываю события NavigationStart угловых маршрутизаторов следующим образом.

    export class AppRoutingService {
      private currentNavigationForward: RoutingPartsModel;
      private rootNavigation: string;


      constructor(
        private navCtrl: NavController,
        private router: Router,
        private logger: Logger
      ) {
        // Monitor NavigationStart so we can look for a back button and redirect to home
        // page if need be
        this.router.events.pipe(
          filter(e => e instanceof NavigationStart))
          .subscribe((ev: NavigationStart) => {
            this.handlePageRouting(ev)
          });
      }

Я хочу сделать это, поскольку у меня есть боковое меню приложения с ярлыкамина каждой из моих страниц функций.Если пользователь переходит на страницу функций из этого меню, то я хочу, чтобы кнопка «Назад» затем переходила на домашнюю страницу, а НЕ на предыдущую страницу функций, с которой он мог перейти.

Я делаю это, следя за собойкаждого маршрута вперед, а затем в handlePageRouting у меня есть следующий код

        if (this.currentNavigationForward.params.fromSideMenu) {
            this.currentNavigationForward = undefined;
            this.navigateRoot = undefined;
            this.logger.debug('handlePageRouting - Navigating to home');
            this.router.navigateByUrl(Constants.vals.pageRoutePaths.home);
          }

Все это, кажется, работает нормально, однако я обнаружил, что как только (или вскоре после) у меня был экземпляргде приведенный выше код выполняет this.router.navigateByUrl(Constants.vals.pageRoutePaths.home), аппаратная кнопка Android перестает работать.Если я перехожу на другую страницу функций с домашней страницы, аппаратная кнопка возврата ничего не делает.Это не вызывает событие NavigationStart, и при этом на моей домашней странице не вызывается следующая подписка.

         this.backButtonSubscription = this.platform.backButton.subscribe(() => {   
            this.backButtonSubscription.unsubscribe();
            this.logger.info('Home exiting app via back button');
            navigator['app'].exitApp();
          });

Однако кнопка возврата toolbar по-прежнему работает, это только аппаратные кнопки, которыеперестает работать и никогда не восстанавливается, пока я не выйду из приложения и не перезапущу.

У меня есть следующее env

    ionic info

    Ionic:

       ionic (Ionic CLI)             : 4.12.0 (C:\Users\peter\AppData\Roaming\npm\node_modules\ionic)
       Ionic Framework               : @ionic/angular 4.4.0
       @angular-devkit/build-angular : 0.13.8
       @angular-devkit/schematics    : 7.2.4
       @angular/cli                  : 7.3.8
       @ionic/angular-toolkit        : 1.4.1

    Cordova:

       cordova (Cordova CLI) : 9.0.0 (cordova-lib@9.0.1)
       Cordova Platforms     : android 8.0.0
       Cordova Plugins       : cordova-plugin-ionic-keyboard 2.1.3, cordova-plugin-ionic-webview 3.1.2, (and 11 other plugins)

    System:

       Android SDK Tools : 26.1.1 (C:\Users\peter\AppData\Local\Android\sdk)
       NodeJS            : v10.15.3 (C:\Program Files\nodejs\node.exe)
       npm               : 6.4.1
       OS                : Windows 10

Есть ли у кого-нибудь какие-либо идеи о том, что здесь может быть не так, или какдиагностировать эту проблему?

Заранее спасибо за любую помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...