2016-08-29 13 views
1

ここにシナリオがあります。私は2つのサービスを注入しました。私はいくつかのデータを確実にしたい。ベースURLが最初のサービスに渡され、以後のすべてのサービスがそのサービスにアクセスできるようになります。角度2 rc4のブートストラップでサービスにデータをロードする方法

はここで、ここで最初のサービスのMyルートコンポーネント

export class AppCmp { 

    constructor (private httpService:HttpService, private SomeService:someService){} 

} 

だ、それはここでカスタムhttpSerive

@Injectable() 
    export class HttpService{ 
     BASE_URL:string; 
     constructor(private http:Http){ 
     } 
     getAll(){ return this.http.get(this.BASE_URL) } 
    } 

HTTPを実行するために最初のものに依存し、第2のサービス、だと仮定することができます。リクエストを得る。

@Injectable() 
export class SomeService{ 
    constructor(private httpSerivce:HttpSerivce){ 
    this.httpService.getAll()... 
    } 
} 

私はハードコードにベースURLをしたい(またはデータ)サービスにいけないと私はlocalStoragesが関与したくないので、私は2つのオプションがあります。どちらか(ブートストラップファイル)main.tsまたはそれらが分離されていると仮定している。

重要なことは、データが最初に利用可能であり、最初に注入されたサービスに渡すことができることです。

私はトピックと感謝を説明することができました!

答えて

1

すべての種類の価値を提供できます。

文字列キー(またはOpaqueToken

{provide: 'BASE_URL', useValue: someUrl} 

を使用して、プロバイダを登録しmain.ts

let injector = ReflectiveInjector.resolveAndCreate(HTTP_PROVIDERS); 
let http = injector.get(Http); 
let authService = new AuthService(new LocalStorage(),http); 
authService.BASE_URL='you url goes here' 


bootstrap(AppComponent, [ 
    APP_ROUTER_PROVIDERS, 
    [provide(AuthService, {useValue: authService})], 
]).catch(err => console.error(err)); 

でこれを行うRC4ため

constructor(@Inject('BASE_URL') private baseURL:string) 
+0

にそれを追加します:しかし、このコードは、RC5

あなたのサービスのためです! –

1

のようにそれを注入行いますこれはですその後、

let authService = new AuthService(new LocalStorage(), http); 
authService.BASE_URL='you url goes here' 

と感謝、これは私が思ったより道が容易であるプロバイダの配列

@NgModule({ 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    ], 
    declarations: [ 
    AppComponent, 
    ], 
    bootstrap: [ 
    AppComponent 
    ], 
    providers: [ 
    {provide: AuthService, useValue: authService}, 
    ] 
}) 
+0

あなたの詳細な説明に感謝します。実際に私が持っている別の問題を解決しました:) –

関連する問題