fix(router): fix regression where navigateByUrl promise didn't resolve on CanLoad failure (#26455)
Fixes #26284 PR Close #26455
This commit is contained in:
parent
dd8a85158e
commit
1c9b06504b
|
@ -606,6 +606,7 @@ export class Router {
|
||||||
const navCancel =
|
const navCancel =
|
||||||
new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), e.message);
|
new NavigationCancel(t.id, this.serializeUrl(t.extractedUrl), e.message);
|
||||||
eventsSubject.next(navCancel);
|
eventsSubject.next(navCancel);
|
||||||
|
t.resolve(false);
|
||||||
/* All other errors should reset to the router's internal URL reference to the
|
/* All other errors should reset to the router's internal URL reference to the
|
||||||
* pre-error state. */
|
* pre-error state. */
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -2796,6 +2796,45 @@ describe('Integration', () => {
|
||||||
]);
|
]);
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
// Regression where navigateByUrl with false CanLoad no longer resolved `false` value on
|
||||||
|
// navigateByUrl promise: https://github.com/angular/angular/issues/26284
|
||||||
|
it('should resolve navigateByUrl promise after CanLoad executes',
|
||||||
|
fakeAsync(inject(
|
||||||
|
[Router, Location, NgModuleFactoryLoader],
|
||||||
|
(router: Router, location: Location, loader: SpyNgModuleFactoryLoader) => {
|
||||||
|
|
||||||
|
@Component({selector: 'lazy', template: 'lazy-loaded'})
|
||||||
|
class LazyLoadedComponent {
|
||||||
|
}
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [LazyLoadedComponent],
|
||||||
|
imports:
|
||||||
|
[RouterModule.forChild([{path: 'loaded', component: LazyLoadedComponent}])]
|
||||||
|
})
|
||||||
|
class LazyLoadedModule {
|
||||||
|
}
|
||||||
|
|
||||||
|
loader.stubbedModules = {lazy: LazyLoadedModule};
|
||||||
|
const fixture = createRoot(router, RootCmp);
|
||||||
|
|
||||||
|
router.resetConfig([
|
||||||
|
{path: 'lazy-false', canLoad: ['alwaysFalse'], loadChildren: 'lazy'},
|
||||||
|
{path: 'lazy-true', canLoad: ['alwaysTrue'], loadChildren: 'lazy'},
|
||||||
|
]);
|
||||||
|
|
||||||
|
let navFalseResult: any;
|
||||||
|
let navTrueResult: any;
|
||||||
|
router.navigateByUrl('/lazy-false').then(v => { navFalseResult = v; });
|
||||||
|
advance(fixture);
|
||||||
|
router.navigateByUrl('/lazy-true').then(v => { navTrueResult = v; });
|
||||||
|
advance(fixture);
|
||||||
|
|
||||||
|
expect(navFalseResult).toBe(false);
|
||||||
|
expect(navTrueResult).toBe(true);
|
||||||
|
|
||||||
|
})));
|
||||||
|
|
||||||
it('should execute CanLoad only once',
|
it('should execute CanLoad only once',
|
||||||
fakeAsync(inject(
|
fakeAsync(inject(
|
||||||
[Router, Location, NgModuleFactoryLoader],
|
[Router, Location, NgModuleFactoryLoader],
|
||||||
|
|
Loading…
Reference in New Issue