示例
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);
但是它们都返回空对象。我现在该怎么办,请帮忙
答案 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中的查询参数的项目一起工作,我认为它不会自行重定向,因此我建议您在项目中查找其他位置,但我可能是错的。
snapshot.paramMap
(在Angular文档中)
Routing & Navigation → Query parameters and fragments on StackOverflow