【问题标题】:RedirectTo with Parameter带参数的重定向到
【发布时间】:2016-12-12 07:38:36
【问题描述】:

根据基本要求,我正在尝试实现一个路由,该路由将重定向到另一个路由并向组件添加一个参数。这是为了上传管理。

其实我们有两条路线:

  • /documents:显示文档列表
  • /documents/upload: 显示文档列表并制作一个带有上传表单的模态框

问题是我在需要保留的 URL 中也有 GET 参数。但是现在,我只想显示在 URL 中的路由 /documents 而不是 /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;
}

【问题讨论】:

    标签: angular


    【解决方案1】:

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

    另见Angular2 router keep query string

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

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

    【讨论】:

    • 所以我会将上传作为 URL 中的参数?不可能传递“隐藏”参数?我也可以在 DocumentService 中定义它,不确定这是否是一个好习惯。
    • 不能有“隐藏”。如果有人将页面添加为书签并从书签中打开它,那么参数将会丢失。当然,您可以将查询参数传递给服务,然后允许其他服务和组件注入它以获取查询值。
    • 实际上该链接将是唯一的并生成的,它适用于非常大的公司内部网。然后我会坚持使用服务参数。感谢您的帮助!
    • 嘿,我在尝试实施解决方案时遇到了一个新问题,你能看看我的编辑吗?
    • 最后通过 RouterStateSnapshop.root.queryParams 检索参数并将其注入 NavigationExtras 的 queryParams 中。非常感谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多