feat(router): Add ability to create `UrlTree` from any `ActivatedRouteSnapshot` by atscott · Pull Request #45877 · angular/angular
atscott
changed the title
feat(router): Add ability to create
feat(router): Add ability to create UrlTree from any `ActivatedRout…UrlTree from any ActivatedRouteSnapshot
…eSnapshot` This exposes a new function from the router public API that allows developers to create a `UrlTree` from _any_ `ActivatedRouteSnapshot`. The current Router APIs only support creating a `UrlTree` from an `ActivatedRoute` which is both active _and_ materially appears in the `UrlTree` (it cannot be an empty path named outlet). This is because the implementation of the current way of creating a `UrlTree` attempts to look up the `UrlSegment` of the `ActivatedRoute` in the currently active `UrlTree` of the router. When this doesn't work, the `UrlTree` creation fails. Note that this API does not replace the current one. That would actually be a breaking change but should be done at some point in the future (v15). That is, `router.navigate` should call this new function. At that point, we can remove `_lastPathIndex`, `_urlSegment`, and `_correctedPathIndex` from the `ActivatedRoute`, along with all of the logic associated with determining what those should be. In addition, this would unblock a fix for angular#26081 because the `applyRedirects` and `recognize` operations could be combined into one. Overall, this would simplify logic in the router and reduce code size. It also exposes core routing capabilities as a helper function which were previously private API, which is a necessary step towards angular#42953. As a stress test for this new function, it _was_ swapped in as the default for `UrlTree` creation in angular#45859 and tested internally. The results indicate that this function behaves correctly. resolves angular#42191 (Tested directly) resolves angular#38276 (The test with a guard covers this case) resolves angular#22763 (Tested directly)
atscott
marked this pull request as ready for review
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters