@angular/router v3-beta に基づいて、これらは必要な手順です。
Observable またはプレーンな値を返すリゾルバーを実装します。
@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
。オブザーバブル自体を利用可能にしたい場合は、それを別のオブザーバブルでラップする必要があります。
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'];
}
スナップショットは、コンポーネント クラスとリゾルバー クラスの両方で、実行状態の値を意味することに注意してください。このアプローチでは、params の更新からデータを更新することはできません。
プラン
カー: http://plnkr.co/edit/jpntLjrNOgs6eSFp1j1P?p=preview