我想在实例化路由/组件之前获取数据。因此,我想使用 Angular2-Routing-Module 中的“解析器”接口。
看看我的代码。它使用字符串作为提供程序名称,但如果我为提供程序使用 OpaqueToken 则会引发错误。
注意“不工作”的评论。
1 我的(儿童)路线(摘录)。
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 我的自定义解析器类(摘录):
@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;
});
}
}
不可能用创建的 OpaqueToken(“MyToken” - 当然不带引号)替换字符串(“myResolver”)。不知道为什么。我为多个提供者使用了多个 OpaqueToken,但解析器无法使用它。
控制台中的错误消息如下所示,没有更多信息。
错误:必须定义令牌!
有人知道吗?