Angular 角度导航也编码?和=查询参数的

Angular 角度导航也编码?和=查询参数的,angular,angular-routing,Angular,Angular Routing,在Angular中,我导航到一个页面,并希望给它一个returnUrl作为参数。我是这样做的: this.router.navigate(['/validation'], { queryParams: { returnUrl: state.url }}); 但这会导致url为: https://myhost/myapp/validation%3FreturnUrl%3D%252FmyUrl 在我期望的地方 https://myhost/myapp/validation?returnUrl=%

在Angular中,我导航到一个页面,并希望给它一个returnUrl作为参数。我是这样做的:

this.router.navigate(['/validation'], { queryParams: { returnUrl: state.url }});
但这会导致url为:

https://myhost/myapp/validation%3FreturnUrl%3D%252FmyUrl
在我期望的地方

https://myhost/myapp/validation?returnUrl=%2FmyUrl
当我阅读文档时,URL应该完全按照我的预期进行编码:值应该编码,但是?完好无损

我的应用程序中错误编码的URL结果找不到/验证URL,并将导航发送到Angulars 404 handling


知道有什么问题吗?

是的,Angular可能正在编码URL组件,但您可以在需要时使用
decodeURIComponent

consturl=”https://myhost/myapp/validation%3FreturnUrl%3D%252FmyUrl";
const decodeURL=decodeURIComponent(url);

console.log(decodeURL)
谢谢,但我的问题是Angular尝试转到名为
validation%3FreturnUrl%3D%252FmyUrl
的页面,而不仅仅是由于此编码而导致的
validation
。所以我自己没有机会破译它。我的问题是,我首先需要阻止这种编码。在您的情况下,当您导航到另一个URL时,不应对当前URL进行编码。为什么不使用
this.router.navigateByUrl(url)试试看?此外,thread还提供了其他解决方案。您能解决这个问题吗?
navigateByUrl
是一个解决办法,但
navigate
本身使用内部路由,不需要完整的URL。我正在寻找一种摆脱双重编码的方法,这样
navigate
就可以正常工作了。很多人都在开发这个应用程序,所以有没有人能在我背后做一些自定义编码器呢?谢谢你的帮助。我的问题是,该项目在某些路线上有2个CANActive。每个都接受state.url并将其放入一个returnUrl,这就是我以双重编码结束的方式。解决方案是将其设置为
route.queryParams['returnUrl']| | state.url
,而不仅仅是state.url。然后,最后一个URL将被另一个CanActivate触发,而不是堆叠必须访问的URL。帮助我弄明白这一点的是这样一句话:“Angular在默认情况下不会这么做。”-那么,我们必须这么做。