Angular 6从网址中删除查询字符串

时间:2018-09-24 09:51:25

标签: javascript angular angular-routing

示例

http://localhost:4200/login?aUasas129198

解析为

http://localhost:4200/login

如果我想要'?'之后的值怎么办?

我尝试做

{ path: 'login/:id', component: LoginComponent },

但这没用

我也尝试过

console.log(this.route.snapshot.queryParams);
console.log(this.route.snapshot.params);

但是它们都返回空对象。我现在该怎么办,请帮忙

2 个答案:

答案 0 :(得分:1)

实际上,您没有在任何密钥中传递值:

http://localhost:4200/login?aUasas129198

正确的方法应该是:

http://localhost:4200/login?anykey=aUasas129198
// get it as
// this._ActivatedRoute.queryParams.subscribe()

如果您使用的是问题中显示的URI,则为:

{ path: 'login/:id', component: LoginComponent }

然后,您应将值传递给id为:

http://localhost:4200/login/aUasas129198
// remember the '/' after the login that you didn't use.
// get it as
// this._ActivatedRoute.snapshot.params.id

答案 1 :(得分:1)

如果无法避免Angular立即重定向并丢失查询参数,则可以订阅路由器事件,并且在NavigationStart路由的每个login上保留路由的queryParamMap或{ {3}},在它们丢失重定向之前,您可以例如将其传递给服务并执行您想使用的任何操作。

或者,作为另一种选择,您可以考虑使用queryParamsHandling: 'preserve'配置路由器,在这种情况下,它应该将查询参数传递给下一条路由(有关更多信息,请参见下面的Angular文档中的部分)

我与一个使用Angular 5,IIRC中的查询参数的项目一起工作,我认为它不会自行重定向,因此我建议您在项目中查找其他位置,但我可能是错的。

另请参见