ionic-team / ionic-team/ionic-framework
bug: NavController direction gets lost when an Angular route guard returns a UrlTree
- Langage dominant
- TypeScript
- Étoiles
- 52.7k
- Forks
- 13.3k
- Merge moyen
- 1 j 15 h
- PR mergées (30 j)
- 51
Description
### 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.
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.