我希望在实例化路由/组件之前获取数据。因此,我想使用来自Angular2-Routing模块的"Resolver"-Interface。
看看我的密码。它使用字符串作为提供程序名称,但如果我为提供程序使用OpaqueToken,则会引发错误。
注意“不起作用”的-Comment。
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;
});
}
}不可能将字符串("myResolver")替换为创建的OpaqueToken ("MyToken“-当然没有引号)。不知道为什么。我为多个提供程序使用了多个OpaqueToken,但是Resolver无法使用它。
控制台中的错误消息如下所示,没有进一步的信息。
错误:必须定义令牌!
有人知道吗?
发布于 2017-02-25 14:10:14
// import MyResolver and MyToken here
export const routes: Routes = [{
path: 'myPath',
component: MyComponent,
children: [
{
path: ':id',
component: MyComponent,
resolve: {
itemData: MyResolver
itemData: MyToken
}
}
]
}];https://stackoverflow.com/questions/42457051
复制相似问题