首页 文章

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

提问于
浏览
16

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

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

this._router.navigate(['/login'], {queryParams: {redirect: 'route1'}});

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

此外,如果我然后导航到具有相同 redirect queryParam的另一个页面,它不会覆盖前一个页面,但会在URL中添加另一个 ?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 回答

  • 7

    你可能想试试这个:

    this.router.navigate(['target'],{preserveQueryParams:false});

  • 20

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

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

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

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

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

    但是需要 route paramscustomer/:id 中的 :id )和 optional matrix params (如 /customers;name=Jo* 中的 ;name=Jo* )是一个导航的本地 . 这就是为具有可选名称过滤器的客户指定导航的方式 .

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

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

  • 0

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

    你也可以

    this._router.navigate(['/route1'], {queryParams: {}});
    

    要么

    this._router.navigateByUrl('/route1');
    

    或使用_86249时:

    <a [routerLink]="['/applications']" [queryParams]="{}"> Applications</a>
    

相关问题