如何防止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 并以此为基础进行构建。