Переход к последнему посещенному дочернему маршруту при вводе родительского маршрута angular 5

В моем приложении Angular 5 мой маршрутизатор настроен следующим образом:

{
        path: 'system-variables',
        component: SystemVariablesComponent,
        children: [
          {
            path: '',
            redirectTo: 'partners-variables',
            pathMatch: 'full'
          },
          {
            path: 'partners-variables',
            component: PartnersVariablesComponent,
            children: [
              {
                path: '',
                redirectTo: 'partners-branches',
                pathMatch: 'full'
              },
              {
                path: 'partners-branches',
                component: PartnersBranchesComponent,
                children: [
                  {
                    path: '',
                    redirectTo: 'register-partners-branches',
                    pathMatch: 'full'
                  },
                  {
                    path: 'register-partners-branches',
                    component: RegisterPartnersBranchesComponent
                  },
                  {
                    path: 'registered-partners-branches',
                    component: RegisteredPartnersBranchesComponent
                  }
                ]
              },
              {
                path: 'partners-stores-categories',
                component: PartnersStoresCategoriesComponent,
                children: [
                  {
                    path: '',
                    redirectTo: 'register-partners-stores-categories',
                    pathMatch: 'full'
                  },
                  {
                    path: 'register-partners-stores-categories',
                    component: RegisterPartnersStoresCategoriesComponent
                  },
                  {
                    path: 'registered-partners-stores-categories',
                    component: RegisteredPartnersStoresCategoriesComponent
                  }
                ]
              }
            ]
          }
        ]

Как вы можете видеть, когда я получаю доступ к '/', я перенаправляюсь на '/ partners-variables', который перенаправляет на '/ partners-variables / partners-branch', а затем на '/ partners-variables / partners-branch / register -партнеры-филиалы ».

Внутри этого вложенного набора дочерних маршрутов можно переходить по нескольким различным путям, и этот код является лишь частью всего моего приложения.

Я пытаюсь загрузить последний посещенный дочерний маршрут при повторном посещении родительского компонента.

Например, если я захожу: '/ переменные-партнеры / филиалы-партнеры / зарегистрировать-филиалы-партнеры' а затем я меняю дочерний маршрут на: '/ переменные-партнеры / филиалы-партнеры / филиалы-партнеры' а затем я меняю родительский маршрут на: '/ партнерские-переменные / партнерские-магазины-категории' и, наконец, снова вернуться к: '/ переменные-партнеры / филиалы-партнеры', по умолчанию (конфигурация маршрута) он перенаправит меня на: '/ переменные-партнеры / филиалы-партнеры / зарегистрировать-филиалы-партнеры' но моим последним посещенным маршрутом внутри родительского маршрута '/ partners-variables / partners-branch' был дочерний маршрут '... / register-partners-branch', и я хотел бы его восстановить.

Предоставляет ли Angular 5 какие-либо встроенные функции для этого? Я мог бы создать его вручную, подписавшись на события изменения маршрута и сохранить в памяти мои последние посещенные дочерние маршруты, но перед тем как это сделать, я хотел бы знать, возможно ли это в самом Angular.

Я не пытаюсь хранить все свои компоненты в памяти, ничего не связывать routeReuseStrategy, просто чтобы отслеживать мои последние посещенные дочерние маршруты для всех родительских маршрутов.

Спасибо!

1
0
716
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, возможно ли это сделать изначально с конфигурацией маршрутизатора.

Но вы можете создать службу, используемую в каждом маршрутизируемом компоненте, для хранения согласованного URL-адреса маршрута. Затем на ngOnInit() каждого родительского компонента вызовите службу, чтобы получить последний сохраненный дочерний URL-адрес и вручную перейти к этому.

В РеестреПартнерыОтраслиКомпонент:

ngOnInit() {
  this.myservice.storeRoute(this.router.url);
}

В родительских компонентах, таких как PartnersBranchesComponent:

ngOnInit() {
  // if you have to redirect (or everytime)
  if (this.router.url === '/partners-variables/partners-branches') {
     this.router.navigateByUrl(this.myservice.lastRoute);
  }
}

Возможно, вам придется объявить службу как синглтон с forRoot() в вашем модуле.

Спасибо за ответ! Да, я думаю, что это единственно возможный способ добиться этого. Собираюсь реализовать вручную =)

Felipe Micali 11.04.2018 15:42

Другие вопросы по теме