2017-01-09 1 views
9

В Ui-маршрутизатор его легко сделать несколько раздела решает, определенные в конфигурации маршрутов, так что позволяет сказать что-то вроде:Angular2 маршрутизатор и несколько Разрешает в одном маршруте

export const APP_STATES: Ng2StateDeclaration[] = [ 
    { 
    name: 'dashboard', 
    url: '/dashboard', 
    component: DashboardComponent, 
    resolve: [ 
     { 
     token: 'playbookDurations', 
     deps: [DashboardService], 
     resolveFn: (svc: DashboardService) => svc.getPlaybookDurations() 
     }, 
     { 
     token: 'playbookSuccesses', 
     deps: [DashboardService], 
     resolveFn: (svc: DashboardService) => svc.getPlaybookSuccesses() 
     }, 
     { 
     token: 'playbookRuns', 
     deps: [DashboardService], 
     resolveFn: (svc: DashboardService) => svc.getPlaybookRuns() 
     }, 
     { 
     token: 'activityLog', 
     deps: [DashboardService], 
     resolveFn: (svc: DashboardService) => svc.getActivityLog() 
     } 
    ] 
    } 
}]; 

при использовании маршрутизатора Angular2 это требует для реализации шаблона разрешения для параметра разрешения. Так что-то вроде этого:

import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 
import { Injectable } from '@angular/core'; 
import { DashboardService } from '.'; 

@Injectable() 
export class DashboardResolver implements Resolve<any> { 

    constructor(private dashboardService: DashboardService) { } 

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    return this.dashboardService.get(); 
    } 

} 

тогда в моем пути я сделать что-то вроде:

import { DashboardComponent } from './dashboard.component'; 
import { DashboardResolver } from './dashboard.resolver'; 

export const routes = [ 
    { 
    path: '', 
    children: [ 
     { 
     path: '', 
     component: DashboardComponent, 
     resolve: { 
      data: DashboardResolver 
     } 
     } 
    ] 
    } 
]; 

проблем есть только ОДИН решительности. Как реализовать несколько аргументов разрешения, таких как реализация ui-router?

Предположим, у вас есть 2 варианта; реализовать резольверы для каждого из этих входов или иметь разрешение вернуть объект со всеми вашими разрешениями вложенными. Первый кажется довольно церемониальным, а второй звучит довольно хаки, поэтому должен быть лучший способ.

+0

вы можете продолжить работу с UIRouter в angular2 BTW :), я делаю это. –

+2

Да, я знаю. Я просто экспериментирую; P – amcdnl

+0

@amcdnl. Вам все еще нужна помощь? – AngularChef

ответ

17

Хорошо, надеюсь, что я не совсем понял вопрос.

Угловой маршрутизатор поддерживает как можно больше преобразователей по маршруту.

В декларации маршрута, resolve свойство является объектом, и это может иметь много ключей, как вы хотите:

{ 
    path: '', 
    component: DashboardComponent, 
    resolve: { 
    foo: Resolver1 
    bar: Resolver2, 
    // more resolves here... 
    } 
} 

Затем извлечь разрешенные данные из компонента:

@Component({ ... }) 
export class MyComponent { 

    constructor(private route: ActivatedRoute) { } 

    ngOnInit() { 
    const foo = this.route.snapshot.data['foo']; 
    const bar = this.route.snapshot.data['bar']; 
    } 

} 

Маршрут не будет активирован до тех пор, пока ВСЕ РЕЛЕСИВЫ не будут выполнены/выполнены.

+0

Так что это хорошо знать наверняка, но я не думаю, что он вполне отвечает на весь его вопрос. Нужно ли нам создавать x число классов разрешающей способности для инъекций для каждого решения, которое мы хотим в маршруте, или как мы собираемся сделать один резольвер, который будет выполнять несколько вызовов службы до того, как маршрут будет активирован? – Marcidius

+0

Это выбор дизайна, и все зависит от вас. Один громоздкий резольвер сделает его менее многоразовым. Если ваш резольвер не привязан к одному конкретному маршруту, я думаю, что создание множества проворных преобразователей - лучший подход. – AngularChef

+1

Здравствуйте, можно получить один объект root с некоторым вложенным объектом? Я хотел бы получить один объект с вложенными объектами вместо многих резольверов. – tylkonachwile

Смежные вопросы