我试图将api注入儿童状态。我的州定义如下所示。
澄清一点。 " API"应该是名为" root"的摘要中解析的值。我想在名为" root.some2"。
的子状态中使用该值{
name: 'root',
abstract: true,
resolve: {
provide: 'api',
useFactory: (http) => http
.get(AppRoute.apiUrl)
.map((response: Response) => response.json())
.toPromise(),
deps: [Http]
}
},
{
name: 'root.some2',
url: '/some2',
component: Something2Component,
resolve: [
{
token: 'exercises',
resolveFn: (http, api) => http
.get(api._links.exercises.href)
.map((response: Response) => response.json())
.toPromise(),
deps: [Http, 'api']
}
]
}
但是没有找到api。我收到了以下错误。
Error: No provider for api!
at NoProviderError.BaseError [as constructor] (errors.js:24)
at NoProviderError.AbstractProviderError [as constructor] (reflective_errors.js:41)
at new NoProviderError (reflective_errors.js:72)
at ReflectiveInjector_._throwOrNull (reflective_injector.js:758)
at ReflectiveInjector_._getByKeyDefault (reflective_injector.js:786)
at ReflectiveInjector_._getByKey (reflective_injector.js:749)
at ReflectiveInjector_.get (reflective_injector.js:558)
at AppModuleInjector.NgModuleInjector.get (ng_module_factory.js:95)
at UIInjectorImpl.getNative (resolveContext.js:178)
at getDependency (resolveContext.js:145)
关于出了什么问题的任何线索?
答案 0 :(得分:1)
使用以下命令会导致在子状态中定义变量api。
{
name: 'root',
abstract: true,
resolve: {
api: [Http, (http) => http
.get(AppRoute.apiUrl)
.map((response: Response) => response.json())
.toPromise()]
}
},
{
name: 'root.some2',
url: '/some2',
component: Something2Component,
resolve: {
token: 'exercises',
resolveFn: (http, api) => http
.get(api._links.exercises.href)
.map((response: Response) => response.json())
.toPromise(),
deps: [Http, 'api']
}
}
答案 1 :(得分:0)
如果你需要一个服务,你的解决方法yopu将需要一个函数的解析类insetad。 简单的例子:
@Injectable()
class MyResolver implements Resolve<MyObject> {
constructor(private backend: Backend) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any>|Promise<any>|any {
return WhateverPromiseOrObservableYouNeed;
}
}
在您的路由器中:
resolve: {
resolveObject: MyResolver
}