fix(router): fix redirect to a URL with a param having multiple values (#16376)
fixes #16310 PR Close #16376
This commit is contained in:
parent
415a0f8047
commit
5d4b36f80f
|
@ -358,7 +358,13 @@ class ApplyRedirects {
|
||||||
private createQueryParams(redirectToParams: Params, actualParams: Params): Params {
|
private createQueryParams(redirectToParams: Params, actualParams: Params): Params {
|
||||||
const res: Params = {};
|
const res: Params = {};
|
||||||
forEach(redirectToParams, (v: any, k: string) => {
|
forEach(redirectToParams, (v: any, k: string) => {
|
||||||
res[k] = v.startsWith(':') ? actualParams[v.substring(1)] : v;
|
const copySourceValue = typeof v === 'string' && v.startsWith(':');
|
||||||
|
if (copySourceValue) {
|
||||||
|
const sourceName = v.substring(1);
|
||||||
|
res[k] = actualParams[sourceName];
|
||||||
|
} else {
|
||||||
|
res[k] = v;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,17 @@ describe('applyRedirects', () => {
|
||||||
(t: UrlTree) => { expectTreeToBe(t, '/a/b/c'); });
|
(t: UrlTree) => { expectTreeToBe(t, '/a/b/c'); });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should support redirecting with to an URL with query parameters', () => {
|
||||||
|
const config: Routes = [
|
||||||
|
{path: 'single_value', redirectTo: '/dst?k=v1'},
|
||||||
|
{path: 'multiple_values', redirectTo: '/dst?k=v1&k=v2'},
|
||||||
|
{path: '**', component: ComponentA},
|
||||||
|
];
|
||||||
|
|
||||||
|
checkRedirect(config, 'single_value', (t: UrlTree) => expectTreeToBe(t, '/dst?k=v1'));
|
||||||
|
checkRedirect(config, 'multiple_values', (t: UrlTree) => expectTreeToBe(t, '/dst?k=v1&k=v2'));
|
||||||
|
});
|
||||||
|
|
||||||
it('should handle positional parameters', () => {
|
it('should handle positional parameters', () => {
|
||||||
checkRedirect(
|
checkRedirect(
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue