我有一个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
有人对这里可能出什么问题或如何诊断此问题有任何想法吗?
在此先感谢您的帮助