我试图弄清楚如何将Angular2路由器导航(路由器3.0.0-alpha.7)与查询参数一起使用。
我可以轻松导航到带有queryParam的路线:
this._router.navigate(['/login'], {queryParams: {redirect: 'route1'}});
在' / login'组件,我做一些登录,它将重定向到redirect
路由,即route1。但是,重定向后,redirect
查询参数会保留在网址中,即我现在位于第/route1?redirect=route1
页。我想在这里删除重定向参数。
此外,如果我导航到具有相同redirect
queryParam的其他网页,则它不会覆盖前一个,但会在网址中添加另一个?redirect=...
。即:
this._router.navigate(['/another-route'], {queryParams: {redirect:'route2'}});
引导我/another-route?redirect=route2?redirect=route1
在路由之间导航时是否可以清除queryParams?
我尝试了this._router.navigate(['/route1'], {queryParams: {redirect: null}});
或{queryParams: null}
等但没有成功。
答案 0 :(得分:21)
我也在努力解决这个问题。您希望路由器在导航到另一条路线时默认清除查询参数...
你可以做任何一次
this._router.navigate(['/route1'], {queryParams: {}});
或
this._router.navigateByUrl('/route1');
或使用routerLink
时:
<a [routerLink]="['/applications']" [queryParams]="{}"> Applications</a>
答案 1 :(得分:7)
实际上......你不应该&#34; 希望路由器清除查询参数&#34;。
显然,你应该期待这一点。但那是因为你不知道一个重要的路由器设计决定......可能是因为,不幸的是,我们还没有在文档中告诉你它。我们现在正在努力纠正这个问题。QueryParams 适用于跨导航的全局参数;他们不会改变。
MatrixParams 适用于属于当前导航的参数;这些确实有所改变。
什么属于全球QueryParams
?来自服务器的东西是候选人。就像属于每次互动的auth令牌一样。
但需要路线参数(:id
中的customer/:id
)和可选矩阵参数(例如;name=Jo*
中的/customers;name=Jo*
1}})是一个导航的本地。这就是为具有可选名称过滤器的客户指定导航的方法。
无论您是否同意这种方法,它都是v.3路由器设计的基础。
我建议调整你的期望而不是打击它。
答案 2 :(得分:0)
你可能想试试这个:
this.router.navigate(['target'],{preserveQueryParams:false});