【发布时间】:2020-09-04 03:27:55
【问题描述】:
我正在使用以下 URL queryParams 策略访问 Angular 应用程序
当我尝试访问 http://localhost:4200/test?url=http://abc/item%2F2/3 时,Angular 正在编码 queryParams,因此我使用 CustomUrlSerializer 将它们解码回来,如下所示,但我想要在不编码或解码的情况下保留相同的 queryParam
但当前 url 已解码并在浏览器 URL 中显示为 http://localhost:4200/test?url=http://abc/item/2/3
但我希望 URL 保持不变,即 http://localhost:4200/test?url=http://abc/item%2F2/3
有人可以为我提供更好的解决方案来处理这种情况吗?
import {UrlSerializer, UrlTree, DefaultUrlSerializer} from '@angular/router';
export class MyUrlSerializer implements UrlSerializer {
public ds = new DefaultUrlSerializer();
parse(url: any): UrlTree {
return this.ds.parse(url);
}
serialize(tree: UrlTree): any {
const serializedUrl = this.ds.serialize(tree);
return serializedUrl
.replace(/%40/gi, '@')
.replace(/%3A/gi, ':')
.replace(/%24/gi, '$')
.replace(/%2C/gi, ',')
.replace(/%3B/gi, ';')
.replace(/%20/gi, '+')
.replace(/%3D/gi, '=')
.replace(/%3F/gi, '?')
.replace(/%2F/gi, '/');
}
}
Slick Grid 演示:https://stackblitz.com/edit/angular-router-basic-example-fm1xua
【问题讨论】:
-
为什么要在应用的 url 中允许此类字符?您是否在 Angular 应用程序之外使用它?你的用例是什么?
标签: angular url-routing angular2-routing query-parameters