带参数的RedirectTo

时间:2016-12-12 07:38:36

标签: angular

在基本要求上,我试图实现一个路由,该路由将重定向到另一个路由并向Component添加一个参数。这是一个上传管理。

实际上我们有两条路线:

  • / documents:显示文件清单
  • / documents / upload:显示文档列表并显示上传表单的模式框

问题是我还需要保留URL中的GET参数。但是现在,我想只显示URL中显示的路径/文档,而不是/ documents / upload,这可能会让人感到困惑,因为如果我们关闭模式,它就是同一页面。

所以,我的预期结果是转到页面/ documents / upload?foo = var& toto = 1234会重定向到/ documents?foo = var& toto1234并保留一个变量告诉我我需要打开模态的。

我已经创建了我的重定向保护,但似乎我的queryParams没有被保留,即使preserveQueryParams为true也是如此。这是一个问题,还是我错过了什么?

canActivate(): boolean {
    this.documentsService._isUploading = true;
    this.router.navigate(['documents'], { preserveQueryParams: true });

    return true;
}

我的路线定义:

{ path: 'documents', component: DocumentsComponent}, 
{ path: 'documents/upload', component: DocumentsComponent, canActivate: [UploadRedirectionGuard]}

遇到同样问题的人的最终解决方案:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    this.documentsService._isUploading = true;
    this.router.navigate(['documents'], { queryParams: state.root.queryParams });

    return true;
}

1 个答案:

答案 0 :(得分:1)

我认为你要找的是https://github.com/angular/angular/issues/12664

另见Angular2 router keep query string

目前我猜你需要使用一种解决方法,比如一个读取查询的守卫并调用this.router.navigate(...)并在重定向时重新添加查询而不是路由中的声明性redirectTo

您可能需要component: MyDummyComponent代替redirectTo: '...' 还有一些改变工作正在进行中或已经发布(不知道)在这种情况下更加宽容。