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

ama*_*iny 18 angular2-routing angular

我试图弄清楚如何使用Angular2路由器导航(路由器3.0.0-alpha.7)与查询参数.

我可以使用此行轻松导航到带有queryParam的路径:

this._router.navigate(['/login'], {queryParams: {redirect: 'route1'}});
Run Code Online (Sandbox Code Playgroud)

在'/ login'组件中,​​我做了一些登录,它将重定向到redirect路由,即route1.但是,重定向后,redirect查询参数保留在URL中,即我现在在页面/route1?redirect=route1.我想在这里删除重定向参数.

此外,如果我然后导航到具有相同redirectqueryParam的另一个页面,它不会覆盖前一个页面,但会?redirect=...在URL中添加另一个页面.即:

this._router.navigate(['/another-route'], {queryParams: {redirect:'route2'}});
Run Code Online (Sandbox Code Playgroud)

引导我 /another-route?redirect=route2?redirect=route1

在路由之间导航时是否可以清除queryParams?我试过this._router.navigate(['/route1'], {queryParams: {redirect: null}});,{queryParams: null}等等但没有成功.

Yar*_*mer 21

我也在努力解决这个问题.您希望路由器在导航到另一个路由时默认清除查询参数...

你也可以

this._router.navigate(['/route1'], {queryParams: {}});
Run Code Online (Sandbox Code Playgroud)

要么

this._router.navigateByUrl('/route1');
Run Code Online (Sandbox Code Playgroud)

或使用时routerLink:

<a [routerLink]="['/applications']" [queryParams]="{}"> Applications</a>
Run Code Online (Sandbox Code Playgroud)

  • ...所以解决方案是在任何地方添加空查询参数*使用链接?那是......可怕...... (3认同)

War*_*ard 7

实际上......你不应该" 期望路由器清除查询参数 ".

显然你会期待的.但那是因为你不知道一个重要的路由器设计决定......可能是因为,遗憾的是,我们还没有在文档中告诉过你.我们正在努力纠正这个问题.

QueryParams用于跨导航的全局参数; 他们不会改变.

MatrixParams用于属于当前导航的参数; 这些确实改变了.

什么属于全球QueryParams?来自服务器的东西是候选人.就像属于每次互动的auth令牌一样.

但是所需的路径参数(:idin customer/:id)和可选的矩阵参数(如;name=Jo*in /customers;name=Jo*)是一个导航的本地.这就是为具有可选名称过滤器的客户指定导航的方式.

无论您是否同意这种方法,它都是v.3路由器设计的基础.

我建议调整你的期望而不是打击它.