一段时间以来一直在尝试在我的应用程序中实现基因解析器。基于我的直觉,我的第一个实现给了我确切的结果,因为这个 SO 问题:如何提供在 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 的所有参数:(?, [object Object])。
我究竟做错了什么?