使用新的Router v3 Angular2清除所有queryParams

时间:2016-07-07 09:58:09

标签: angular angular2-routing

我试图弄清楚如何将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}等但没有成功。

3 个答案:

答案 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});