如何从外部模块覆盖Angular 2提供程序

时间:2017-01-20 06:31:11

标签: angular service dependency-injection

我有一个单独的LocalizationModule,其中包含LocaleService作为依赖项的defaultLanguage

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?

1 个答案:

答案 0 :(得分:4)

直接添加到@NgModule({ imports: [LocalizationModule], providers: [localeServiceProvider], }) export class AppModule {} 的提供商,始终覆盖导入模块的提供商。

func searchFromList(searchText:String, mainArray:AnyObject, key:String) -> AnyObject{
    var searchArray:[AnyObject]
    searchArray = []

    if searchText.length > 0 {
        if mainArray.count > 0 {
            let predicate = NSPredicate(format: "\(key) contains[c] %@", searchText)
            searchArray = mainArray.filteredArrayUsingPredicate(predicate)
        }
    }
    return searchArray
}