2016-10-29 1 views
3

Я пытаюсь выяснить, есть ли более оптимизированный способ совместного использования одного и того же резольвера между двумя дочерними маршрутами для детей. Ниже приведен пример того, как маршруты связаны с преобразователями.Угловой 2: дочерние маршруты Sibling, разделяющие один и тот же резольвер

import { CommonModule } from '@angular/common'; 
import { RouterModule } from '@angular/router'; 
import { NgModule } from '@angular/core'; 
export const routes = [{ 
     path: '', 
     component: parentComponent, 
     canActivate: [AuthGuard], 
     resolve: { 
      someData: someDataResolver 
     }, 
     children: [ 
      { path: '', redirectTo: '0', pathMatch: 'full' }, 
      { path: '0', 
       component: someComponent1, 
       resolve: { 
        someData1: someData1Resolver, 
        someData2: someData2Resolver, 
       } 
      }, 
      { path: '2', 
       component: someComponent2, 
       resolve: { 
        someData2: someData2Resolver 
       } 
      } 
      ... a bunch more children routes/components with resolvers 

     ] 
    }] 

В настоящее время я повторяю призывы резонаторов для каждого маршрута для детей, что, я считаю, не является оптимальным. Кто-нибудь знает, есть ли лучший способ поделиться данными из общего дочернего резонатора дочернего узла? Я подумал о том, чтобы установить данные из дублирующего преобразователя в общую службу, а затем другой дочерний маршрут для доступа к данным из службы (вместо того, чтобы делать другой вызов api в преобразователе). Есть ли еще более оптимальные решения?

ответ

5

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

import { CommonModule } from '@angular/common'; 
import { RouterModule } from '@angular/router'; 
import { NgModule } from '@angular/core'; 
export const routes = [{ 
     path: '', 
     component: parentComponent, 
     canActivate: [AuthGuard], 
     resolve: { 
      someData: someDataResolver 
     }, 
     children: [ 
      { path: '', 
       resolve: { 
        someData2: someData2Resolver 
       }, 

      children: [ 
       { path: '', redirectTo: '0', pathMatch: 'full' }, 
       { path: '0', 
        component: someComponent1, 
        resolve: { 
         someData1: someData1Resolver, 
        } 
       }, 
       { path: '2', 
        component: someComponent2, 
       } 
       ... a bunch more children routes/components with resolvers 
      ] 
     ] 
    }] 
+0

Как компонент доступа к ребенку разрешенные данные из родительского компонента? – Gambo

+3

Когда дочерний маршрут вводит «route: ActivatedRoute», он должен иметь доступ к нему с помощью 'this.route.parent.data' или' this.route.parent.snapshot.data' –

+0

Это работает, спасибо! Каково ваше предложение перезагрузить данные, например, пользователь отредактировал объект, перейдя к подробному представлению? путь: ': идентификатор', компонент: CustomerDetailComponent, распознаватель: {клиент: ...}, детей: [ {путь: 'редактировать', компонент: CustomerEditComponent ....} ] данные не перезагружается, поскольку пользователи остаются в родительском маршруте. – Gambo