如何防止Angular在问号后截断url参数?
How to prevent Angular from cuttin off url paramters after a question mark?
给出一个 url 喜欢 http://www.example.com?a=?&b=2
Angular 在第二个问号处切断了 url,尽管根据 RFC 定义在那里允许使用问号。
不幸的是,我无法 url 对问号进行编码或以任何其他方式更改 url。
你们知道如何改变这种行为并保持整体 url 吗?
非常感谢任何帮助。
亲切的问候,
保罗
如果您查看 docs 中的 Router
构造函数,它会注入 UrlSerializer
,稍后用于序列化/反序列化路由。默认情况下,Angular 注入 DefaultUrlSerializer
,它对 queryParams 进行编码。
但是您可以通过在模块的提供程序中指定来注入您自己的实现:
providers: [{ provide: UrlSerializer, useClass: YourCustomUrlSerializer }],
当然,您必须自己提供该自定义实现。界面是 quite simple,所以它看起来像这样:
export class YourCustomUrlSerializer implements UrlSerializer {
parse(url: any): UrlTree {
// Your implementation here
}
serialize(tree: UrlTree): any {
// Your implementation here
}
}
可惜逻辑比较复杂,不是写几行代码那么简单。您可以检查默认实现 here 并以此为基础进行构建。
给出一个 url 喜欢 http://www.example.com?a=?&b=2 Angular 在第二个问号处切断了 url,尽管根据 RFC 定义在那里允许使用问号。
不幸的是,我无法 url 对问号进行编码或以任何其他方式更改 url。
你们知道如何改变这种行为并保持整体 url 吗?
非常感谢任何帮助。
亲切的问候, 保罗
如果您查看 docs 中的 Router
构造函数,它会注入 UrlSerializer
,稍后用于序列化/反序列化路由。默认情况下,Angular 注入 DefaultUrlSerializer
,它对 queryParams 进行编码。
但是您可以通过在模块的提供程序中指定来注入您自己的实现:
providers: [{ provide: UrlSerializer, useClass: YourCustomUrlSerializer }],
当然,您必须自己提供该自定义实现。界面是 quite simple,所以它看起来像这样:
export class YourCustomUrlSerializer implements UrlSerializer {
parse(url: any): UrlTree {
// Your implementation here
}
serialize(tree: UrlTree): any {
// Your implementation here
}
}
可惜逻辑比较复杂,不是写几行代码那么简单。您可以检查默认实现 here 并以此为基础进行构建。