Унаследованные данные маршрутизации не работают в canActivate guard

#angular

#angular

Вопрос:

Параметры маршрутизации: 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, так что … похоже, что наследование работает, но нев случае разрешения. Внутри guard я должен получить доступ к route.parent.data.subject.

Когда я нахожусь в компоненте B и обновляю страницу, все работает правильно.

У меня есть два разных поведения внутри guard.

  1. Когда я перехожу к компоненту B, мне нужно получить доступ к route.parent.data.subject.
  2. Когда я нахожусь на странице компонента B и обновляю страницу, я должен получить доступ к route.data.subject

Это ошибка или ошибка? Может быть, моя структура маршрутизации неверна?

Ответ №1:

Проблема заключалась в том, как я переходил от компонента A к компоненту B

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

‘RelatedTo’ каким-то образом удалил наследование из /a в /a:someParammeeero