2017-01-20 4 views
2

У меня есть отдельный LocalizationModule, который содержит LocaleService, который имеет defaultLanguage как зависимость:Как переопределить Угловые 2 поставщика от внешнего модуля

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

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

    ... 
} 

Так что теперь я должен предоставить завод, чтобы создать эту зависимость, когда инжектор пытается решить ее :

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

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

И у меня в LocalizationModule:

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

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

В комплект поставки входит библиотека и упакован в реестр npm. Теперь я хочу использовать этот модуль в своих многочисленных приложениях, но мне нужно настроить язык по умолчанию. Как я могу переопределить i18nServiceProvider с моим собственным провайдером?

ответ

3

Провайдеры добавили в AppModule напрямую, всегда переопределяют поставщиков из импортированных модулей.

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

Это не работает и по-прежнему вызывает исключение из-за отсутствия поставщика для строки. – EwanCoder

+0

Вы ленивы загружаете какие-либо модули? –

+0

Да, используя angular2-router-loader, но я пытаюсь использовать свой LocalizationModule в основном AppModule. Кроме того, чтобы прояснить мой предыдущий комментарий, если я создаю своего собственного провайдера и предоставят другой язык по умолчанию - язык по-прежнему «en-US». Если я перестрою свою библиотеку LocalizationModule, чтобы она предоставляла LocaleService без провайдера, она не будет вызывать провайдера для исключения строк. – EwanCoder

 Смежные вопросы

  • Нет связанных вопросов^_^