Angular 2 v3路由器 - 如何在子路由中获取父路由参数

标签 angular angular2-routing

我有一条定义为/abc/:id/xyz 的路线

其中 abc/:id 解析为 ComponentA,/xyz 是显示在路由器导出 (ComponentB) 中的子组件

当导航到/abc/:id/xyz 时,当我在 ComponentA 中执行 this.route.params.subscribe(...) (其中路由是 ActivatedRoute)时,我看到了 :id。在 ComponentB 中做同样的事情时,我没有看到 :id。我猜 ActivatedRoute 正在使用 url 段。

有没有办法获取路由中的所有参数?

最佳答案

未经测试,但根据 Savkin's blog ,将以下内容放入子组件中以获取父组件的路由器参数:

constructor(activatedRoute: ActivatedRoute, router: Router) {
    const parentActivatedRoute = router.routerState.parent(activatedRoute);
    this.id = parentActivatedRoute.params.map(routeParams => routeParams.id);
}

将该代码与 Router guide 中的代码进行比较,您需要在模板中使用带有 id 的 AsyncPipe,或者您可以使用 subscribe()...或者您可以使用 snapshot 如果您确定 id 值不会改变:

this.id = parentActivatedRoute.snapshot.params['id'];

@Chris 在下面的评论中提到:this.router.routerState.pathFromRoot(this.route) 将返回一组激活的路由,直至当前路由。 然后就可以得到所有激活路由的参数。

更新:RouterState.pathFromRoot(someRoute) 被标记为 deprecated in master 。在 RC.5 中,使用 ActivatedRoute.pathFromRoot()

关于Angular 2 v3路由器 - 如何在子路由中获取父路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510170/

相关文章:

Angular2 将纯文本转换为 url( anchor 链接)的方法

Angular 2 : routing within a module (secondary nested router-outlet)

javascript - 如何在 Angular 2 中将字符串的特定部分设为粗体

html - 我想做图像中心

Angular 2新路由器routerCanReuse

javascript - 从 Angular 2 升级到 Angular 4.4 时 Angular 路由器问题

javascript - mat-spinner 是如何在 mat-table 中渲染的?

Angular 单元测试表单验证

javascript - 禁用不被视为 HTML 属性

javascript - Angular 2 路由器 : route everything behind a certain route