【问题标题】:Inherited routing data does not work in CanActivate guard继承的路由数据在 CanActivate 防护中不起作用
【发布时间】:2020-11-19 17:48:30
【问题描述】:

路由设置:paramsInheritanceStrategy: 'always'

99% 有效。来自较高组件的参数和数据传递给较低组件。两者都可以在激活的路由参数和数据中的组件中访问。问题出现在 CanActivate 中。假设我们有这样的路由:

path: '/a',
data: {
  param1: true
},
resolve: {subject: SubjectResolver},
children: [
  {
    path: ':someParammeeero',
    component: B,
    canActivate: [BGuard]
  },
  {
    path: '',
    component: A
  }
]

组件 A 有一个重定向到组件 B 的按钮。当我在组件 A 中时,我可以访问 route.data.subject 但是当我尝试转到组件 B 时,在 BGuard 激活的路由内部没有数据内部的主题,但是有 param1 所以......这就像继承工作,但不是在解决情况下。内部守卫我必须访问 route.parent.data.subject。

当我在组件 B 上并刷新页面时,一切正常。

我在守卫内部有两种不同的行为。

  1. 当我导航到 B 组件时,我必须访问 route.parent.data.subject。
  2. 当我在 B 组件页面并刷新页面时,我必须访问 route.data.subject

这是一个错误还是一个特征?也许我的路由结构不正确?

【问题讨论】:

    标签: angular


    【解决方案1】:

    问题在于我从组件 A 导航到组件 B 的方式

    this.router.navigate(..., {relatedTo: this.activatedRoute})

    'relatedTo' 以某种方式移除了从 /a 到 /a:someParammeeeero 的继承

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2020-12-28
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2017-09-15
      • 2016-10-23
      • 1970-01-01
      相关资源
      最近更新 更多