fix(router): ensure history.state
is set in eager
update mode (#30154)
Without this change, `history.state` isn't being set when updating the browser URL in `eager` update mode. PR Close #30154
This commit is contained in:
parent
3327bd8eab
commit
b40f6f3eae
@ -516,7 +516,8 @@ export class Router {
|
|||||||
tap(t => {
|
tap(t => {
|
||||||
if (this.urlUpdateStrategy === 'eager') {
|
if (this.urlUpdateStrategy === 'eager') {
|
||||||
if (!t.extras.skipLocationChange) {
|
if (!t.extras.skipLocationChange) {
|
||||||
this.setBrowserUrl(t.urlAfterRedirects, !!t.extras.replaceUrl, t.id);
|
this.setBrowserUrl(
|
||||||
|
t.urlAfterRedirects, !!t.extras.replaceUrl, t.id, t.extras.state);
|
||||||
}
|
}
|
||||||
this.browserUrlTree = t.urlAfterRedirects;
|
this.browserUrlTree = t.urlAfterRedirects;
|
||||||
}
|
}
|
||||||
|
@ -631,6 +631,7 @@ describe('Integration', () => {
|
|||||||
advance(fixture);
|
advance(fixture);
|
||||||
expect(fixture.nativeElement).toHaveText('team 33 [ , right: ]');
|
expect(fixture.nativeElement).toHaveText('team 33 [ , right: ]');
|
||||||
})));
|
})));
|
||||||
|
|
||||||
it('should eagerly update the URL with urlUpdateStrategy="eagar"',
|
it('should eagerly update the URL with urlUpdateStrategy="eagar"',
|
||||||
fakeAsync(inject([Router, Location], (router: Router, location: Location) => {
|
fakeAsync(inject([Router, Location], (router: Router, location: Location) => {
|
||||||
const fixture = TestBed.createComponent(RootCmp);
|
const fixture = TestBed.createComponent(RootCmp);
|
||||||
@ -722,6 +723,33 @@ describe('Integration', () => {
|
|||||||
expect(fixture.nativeElement).toHaveText('team 33 [ , right: ]');
|
expect(fixture.nativeElement).toHaveText('team 33 [ , right: ]');
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
it('should should set `state` with urlUpdateStrategy="eagar"',
|
||||||
|
fakeAsync(inject([Router, Location], (router: Router, location: SpyLocation) => {
|
||||||
|
|
||||||
|
router.urlUpdateStrategy = 'eager';
|
||||||
|
router.resetConfig([
|
||||||
|
{path: '', component: SimpleCmp},
|
||||||
|
{path: 'simple', component: SimpleCmp},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const fixture = createRoot(router, RootCmp);
|
||||||
|
let navigation: Navigation = null !;
|
||||||
|
router.events.subscribe(e => {
|
||||||
|
if (e instanceof NavigationStart) {
|
||||||
|
navigation = router.getCurrentNavigation() !;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
router.navigateByUrl('/simple', {state: {foo: 'bar'}});
|
||||||
|
tick();
|
||||||
|
|
||||||
|
const history = (location as any)._history;
|
||||||
|
expect(history[history.length - 1].state.foo).toBe('bar');
|
||||||
|
expect(history[history.length - 1].state)
|
||||||
|
.toEqual({foo: 'bar', navigationId: history.length});
|
||||||
|
expect(navigation.extras.state).toBeDefined();
|
||||||
|
expect(navigation.extras.state).toEqual({foo: 'bar'});
|
||||||
|
})));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should navigate back and forward',
|
it('should navigate back and forward',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user