ルート/コンポーネントがインスタンス化される前にデータをフェッチしたい。したがって、Angular2-Routing-Module の "Resolver" インターフェイスを使用したいと考えています。
私のコードを見てください。プロバイダー名として文字列を使用していますが、プロバイダーに OpaqueToken を使用するとエラーがスローされます。
「NOT WORKING」コメントに注意してください。
1 My (Child-)Routes (抜粋)。
export const routes: Routes = [{
path: 'myPath',
component: MyComponent,
children: [
{
path: ':id',
component: MyComponent,
resolve: {
itemData: 'MyResolver' // WORKING --- wanted to replace with itemData: MyToken
}
}
]
}];
2 私のモジュールのコード (抜粋):
export let MyToken: OpaqueToken = new OpaqueToken('my.resolver');
@NgModule({
imports: [
CommonModule,
...
],
declarations: [
MyComponent,
],
providers: [
{
provide: 'MyResolver', // WORKING -- wanted to replace with provide: MyToken
useFactory: (DataService: any) => {
return new MyResolverService(DataService);
},
deps: [MyInstanceOfDataService]
}
]
})
export class MyModule {
}
3 私のカスタム Resolver-Class (抜粋):
@Injectable()
export class MyResolverService implements Resolve<any> {
constructor(protected DataService: any) {
}
resolve(ActivatedRoute: ActivatedRouteSnapshot): Promise<any> {
return this.DataService.getItem(id).toPromise()
.then((response: any}) => {
return response;
});
}
}
文字列 ("myResolver") を作成された OpaqueToken ("MyToken" - もちろん引用符なし) に置き換えることはできません。理由がわからない。複数のプロバイダーに複数の OpaqueToken を使用していますが、リゾルバーはそれを使用できません。
コンソールのエラー メッセージは次のように表示されますが、これ以上の情報はありません。
エラー: トークンを定義する必要があります!
誰でもアイデアはありますか?