【发布时间】:2019-10-25 17:07:20
【问题描述】:
一段时间以来,我一直在尝试在我的应用中实现基因解析器。根据我的直觉,我的第一个实现给了我这个 SO 问题的确切结果:How to provide a service that uses generics in Angular4?,这当然也给了我确切的错误。
我尝试使用例外答案(使用InjectionToken)解决它,但无法让它工作,也许我对使用InjectionToken 不够熟练,我当前的代码:
GenericResolverService
`export interface GetItem<T> {
getItem(id: number): Observable<T>;
}
@Injectable()
export class GenericResolverService<T, U extends GetItem<T>>
implements Resolve<T> {
constructor(private dataService: U,
private router: Router) {
}
resolve(route: ActivatedRouteSnapshot,
stata: RouterStateSnapshot):
Observable<T> | Observable<never> {
const itemId = +route.paramMap.get('id');
return this.dataService.getItem(itemId).pipe(
take(1),
mergeMap(item => {
if (item) {
return of(item);
} else {
this.router.navigate(['/error/not-found']);
return EMPTY;
}
})
);
}
}`
路由器模块
const ITEM_RESOLVER =
new InjectionToken<GenericResolverService<ItemMasterData, ItemMasterDataService>>
('itemResolver');
const routes: Routes = [
{
path: ':id', component: ItemMasterDataEditComponent,
resolve: {
item: ITEM_RESOLVER
}
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
providers: [{ provide: ITEM_RESOLVER, useClass: GenericResolverService}]
})
export class ItemMasterDataRoutingModule { }
ItemMasterDataService
@Injectable()
export class ItemMasterDataService implements GetItem<ItemMasterData> {
public getItem(id: number): Observable<ItemMasterData> {
...
}
当前代码抛出错误:
错误:无法解析 GenericResolverService 的所有参数:(?, [对象对象])。
我做错了什么?
【问题讨论】:
标签: angular generics angular-resolver