2016-12-17 13 views
0

私は子状態に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) 

何が問題になるかについての手掛かりはありますか?

答えて

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'] 
    } 
} 
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; 
    } 
} 

:以下を使用して

​​
+0

ただし、サービスではありません。私は単に、親状態で解決された値(API)を使用したいと思います。 – user672009

関連する問題