在拦截NavigationStart并通过Router.navigateByUrl

时间:2019-05-13 12:38:04

标签: android angular cordova ionic-framework ionic4

我有一个Ionic 4应用程序,其中有一个服务,可按以下方式拦截Angular路由器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后退按钮仍然起作用,只有硬件按钮停止工作,直到退出应用程序并重新启动后才恢复。

我有以下环境

    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

有人对这里可能出什么问题或如何诊断此问题有任何想法吗?

在此先感谢您的帮助

0 个答案:

没有答案