gpt4 book ai didi

angular - 一般替换 Angular 2 路由参数并导航

转载 作者:太空狗 更新时间:2023-10-29 17:21:17 24 4
gpt4 key购买 nike

我正在构建一个 Angular 应用程序,其中大部分路由都属于给定项目并包含一个 projectId。在顶部导航区域将是项目的下拉列表。当用户从下拉列表中选择一个项目时,它需要导航到当前路径,但将 projectId 替换为新值。

这与 Angular navigate to url by replacing an existing parameter 非常相似,但是他们接受的答案使用了查询参数;这需要处理所需的路由参数。此外,projectId 可能会出现在 route 的不同位置,因此这通常需要能够按名称换出路线参数。

所以假设我可能有以下路线:

project/:projectId/details
dashboard/status/:projectId/:year/:month/:day
admin/projects/:projectId
admin/contacts/:projectId/settings
admin/generalSettings

这些路线是虚构的,但表明 projectId 可能出现在不同的位置,并且不会以任何特定单词开头(因此我不能例如查找名为“project”的段然后获取下一个段)。

从概念上讲,我想

  • 从路由器中获取当前路由和路由参数(如paramMap)、查询参数和矩阵参数的映射
  • 根据需要修改这些 map 中的值,即如果 paramMap 包含“projectId”,则更新它。
  • 将路线和 map 交还给路由器以导航到那里。

所以它在概念上看起来很简单,但是当我查看 Router 的 routerState 及其路由树(我不太了解)和 Router.navigate 方法时,我看不出如何实现这一点。我对遍历路线树以重新构建路线没有问题,只要 1) 它可以在不了解应用程序路线结构的情况下一般地完成,并且 2) 生成的路线与原始路线相同(包括查询和矩阵参数)而不是对目标路由参数(projectId)的更改。

最佳答案

这个怎么样:

我将 ActivatedRoute 和 Router 注入(inject)到我的服务/组件中:

constructor(
private route: ActivatedRoute,
private router: Router) {}

然后我做了一个改变路由矩阵参数的方法。参数是要替换的矩阵参数的名称和新值。除了将路径段与激活路由的参数进行比较之外,我没有找到其他查找要替换的参数的方法。

changeParam(replaceParamName: string, val: any) {
let replacePathParamIndex;
let replacePathParamValue;
this.route.params
.map((params) => replacePathParamValue = params[replaceParamName])
.mergeMap(() => this.route.url)
.map((urlSegment) =>
urlSegment.map((segment, ndx) => {
if (segment.path === replacePathParamValue) {
replacePathParamIndex = ndx;
}
return segment.path;
})
)
.subscribe((pathparts: any[]) => {
pathparts[replacePathParamIndex] = val;
this.router.navigate(pathparts);
});
}

最后通过调用导航到被替换的路由:

changeParam('projectId','newprojectid');

关于angular - 一般替换 Angular 2 路由参数并导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45067939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com