ionic-team / ionic-team/ionic-framework

bug: NavController direction gets lost when an Angular route guard returns a UrlTree

オープン
#31,071 コメント 1 件 リアクション 4 件 担当者 0 名 GitHub で見る
triage
主要言語
TypeScript
スター
52.7k
フォーク
13.3k
平均マージ
1日 15時間
マージ済み PR(30日)
51

説明

### Prerequisites

- [x] I have read the [Contributing Guidelines](https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#creating-an-issue).
- [x] I agree to follow the [Code of Conduct](https://ionicframework.com/code-of-conduct).
- [x] I have searched for [existing issues](https://github.com/ionic-team/ionic-framework/issues) that already report this problem, without success.

### Ionic Framework Version

v8.x

### Current Behavior

When using NavController.navigateRoot and an Angular Route Guard returns a UrlTree, the existing pages in the navigation stack remain.

### Expected Behavior

When using NavController.navigateRoot and an Angular Route Guard returns a UrlTree, the existing pages in the navigation stack are removed.

### Steps to Reproduce

1. Install @ionic/angular and @ionic/core >= 8.7.18
2. Setup an Angular route with a Route Guard that returns a UrlTree
3. Use NavController.navigateRoot to navigate to that route
4. Check the navigation stack, for example with IonRouterOutlet.canGoBack

### Code Reproduction URL

https://github.com/ionic-team/ionic-framework/pull/30955/changes/ca03a6d5f7a0d57ccb6db29284338152468894f2

### Ionic Info

Ionic:

Ionic CLI : 6.20.1
Ionic Framework : not installed
@angular-devkit/build-angular : 21.2.2
@angular-devkit/schematics : 21.2.2
@angular/cli : 21.2.2
@ionic/angular-toolkit : not installed

Capacitor:

Capacitor CLI : 8.1.0
@capacitor/android : 8.1.0
@capacitor/core : 8.1.0
@capacitor/ios : 8.1.0

Utility:

cordova-res : not installed globally
native-run : not installed globally

System:

NodeJS : v22.22.0
npm : 10.9.4
OS : macOS

### Additional Information

The issue was introduced in Ionic 8.7.18 with https://github.com/ionic-team/ionic-framework/pull/30955. Because of that PR, a NavigationCancel leads to the NavController direction being lost. This is not necessarily bad, but it interacts poorly with Angular Route Guard redirects. When such a Route Guard returns a UrlTree, the initial navigation gets cancelled and a new navigation to that UrlTree gets started. Unfortunately, that new navigation loses the information about the NavController direction because of the intermittent NavigationCancel.

Preferred solution:
Detect whether the NavigationCancel was caused by a Route Guard redirecting somewhere else and in those cases retain the NavController direction.

Alternative solution:
If our preferred solution is not feasible, please provide guidance on how to achieve the intended outcome. In our case: Start a navigation such that if the Route Guards lead to a successful navigation, the rest of the navigation stack is removed.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。