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)
实际上......你不应该" 期望路由器清除查询参数 ".
显然你会期待的.但那是因为你不知道一个重要的路由器设计决定......可能是因为,遗憾的是,我们还没有在文档中告诉过你.我们正在努力纠正这个问题.
QueryParams用于跨导航的全局参数; 他们不会改变.
MatrixParams用于属于当前导航的参数; 这些确实改变了.
什么属于全球QueryParams?来自服务器的东西是候选人.就像属于每次互动的auth令牌一样.
但是所需的路径参数(:idin customer/:id)和可选的矩阵参数(如;name=Jo*in /customers;name=Jo*)是一个导航的本地.这就是为具有可选名称过滤器的客户指定导航的方式.
无论您是否同意这种方法,它都是v.3路由器设计的基础.
我建议调整你的期望而不是打击它.