2017-01-20 4 views
2

Ich habe eine separate LocalizationModule außer Kraft zu setzen, die LocaleService die defaultLanguage als Abhängigkeit hat enthält:Wie Angular 2 Anbieter von externen Modul

import { Injectable } from '@angular/core'; 

@Injectable() 
export class LocaleService { 
    constructor(defaultLanguage: string) { 
     ... 
    } 

    ... 
} 

So, jetzt muss ich Fabrik liefern diese Abhängigkeit zu erzeugen, wenn Injektor es zu lösen versucht, :

let localeServiceFactory =() => { 
    return new LocaleService('en-US'); 
}; 

export let localeServiceProvider = { 
    provide: LocaleService, 
    useFactory: localeServiceFactory 
}; 

Und ich habe in meinem LocalizationModule:

import { NgModule } from '@angular/core'; 

@NgModule({ 
    providers: [ 
     i18nServiceProvider 
    ] 
}) 
export class LocalizationModule { } 

Dies ist als Bibliothek gebündelt und in npm-Registrierung verpackt. Jetzt möchte ich dieses Modul in meinen vielen Apps verwenden, aber ich muss die Standardsprache konfigurieren können. Wie kann ich i18nServiceProvider mit meinem eigenen Provider überschreiben?

Antwort

3

Anbieter, die direkt zu AppModule hinzugefügt wurden, überschreiben immer Anbieter importierter Module.

@NgModule({ 
    imports: [LocalizationModule], 
    providers: [localeServiceProvider], 
}) 
export class AppModule {} 
+0

Dies funktioniert nicht und löst immer noch die Ausnahme über keinen Anbieter für Zeichenfolge. – EwanCoder

+0

Sind Sie faul, eines der Module zu laden? –

+0

Ja, mit angular2-router-loader, aber ich versuche, meine LocalizationModule im Haupt-AppModule zu verwenden. Außerdem, um meinen vorherigen Kommentar zu klären, Wenn ich meinen eigenen Provider erstelle und eine andere Standardsprache zur Verfügung stelle - Sprache ist immer noch 'en-US'. Wenn ich meine Bibliothek LocalizationModule so neu anlege, dass sie LocaleService ohne Provider bereitstellt, wird kein Provider für die String-Ausnahme ausgelöst. – EwanCoder

Verwandte Themen