На основе @ углового/маршрутизатора v3-бета, эти необходимые шаги.
Реализовать распознаватель, который возвращает наблюдаемом или простую величину:
@Injectable()
export class HeroResolver implements Resolve {
constructor(
private service: HeroService
) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Hero> {
const id = +route.params['id'];
return Observable.fromPromise(this.service.getHero(id));
}
}
Обратите внимание, что в случае, когда вы возвращаетесь наблюдаемым, развернутое значение (первые один) будет доступно через route.snapshot.data
. Если вы хотите, наблюдаемых сам будут доступны, то вам нужно обернуть его в другой Observable:
return Observable.of(source$);
Добавить распознаватель в маршрут:
export const HeroesRoutes: RouterConfig = [
{ path: 'heroes', component: HeroListComponent, resolve: { heroes: HeroesResolver } },
{ path: 'hero/:id', component: HeroDetailComponent, resolve: { hero: HeroResolver } }
];
Наконец, обеспечить свой класс решительности и любой зависимость для начальной загрузки или ваш главный компонент providers
:
bootstrap(AppComponent, [
HeroesResolver, HeroService
])
Потребляйте разрешенные данные из экземпляра ActivatedRoute:
ngOnInit() {
this.hero = this.route.snapshot.data['hero'];
}
Помните, что моментальный снимок означает значение в состоянии выполнения, как в классе компонента, так и в классе resolver. Данные не могут быть обновлены из обновлений параметров с помощью этого подхода.
Plunker: http://plnkr.co/edit/jpntLjrNOgs6eSFp1j1P?p=preview Исходный материал: https://github.com/angular/angular/commit/f2f1ec0#diff-a19f4d51bb98289ab777640d9e8e5006R436
AFAIK это функциональность еще не реализована. Следите за [этой проблемой] (https://github.com/angular/angular/issues/4015). На данный момент вы можете попытаться использовать ['@ CanActivate'] (https://github.com/angular/angular/blob/2.0.0-alpha.45/modules/angular2/src/router/lifecycle_annotations.ts#L20) и '@ OnActivate' (но это, конечно, не функция' resolve'). – alexpods
Возможный дубликат [Angular2: получить данные родительского маршрутизатора] (http://stackoverflow.com/questions/35299238/angular2-get-parent-router-data) –