我正在为Angular 2编写一个库服务,我希望调用应用程序能够提供一些配置。我可以在基类上创建抽象属性,但这会导致调用应用程序必须在多个位置定义配置。
在Angular2应用程序中,我在主应用程序模块中使用了这样的技术
let config: any = { param1: 'value 1', param2: 'value 2' };
@NgModule({
providers: [ {provide: 'app.config', useValue: config } ]
})
然后我可以使用@Inject('app.config')在需要的地方注入配置。但是,由于我正在编写的库是定义要扩展的基类,我不希望在构造函数上注入此值,因为它需要调用应用程序注入值并通过super()转发它。
我一直在关注ReflectiveInjector类,但它需要一个类型而不是一个字符串。
let appConfig = ReflectiveInjector.resolve('app.config').get();
我怎样才能做到这一点?
答案 0 :(得分:0)
我一直在看ReflectiveInjector类,但它需要一个类型 而不是一个字符串。
这样的东西?
let config: any = { param1: 'value 1', param2: 'value 2' };
let injector: any = ReflectiveInjector.resolveAndCreate([
{
provide: 'app.config',
useValue: config
}
]);
let configService = injector.get('app.config');
console.log(configService);
答案 1 :(得分:0)
您可以定义一个OpaqueToken
export const APP_CONFIG = new OpaqueToken('app.config');
并将其用作类型,而不是使用字符串
let appConfig = ReflectiveInjector.resolve(APP_CONFIG).get();
如果我理解正确,您希望在应用程序初始化之前使用单个请求加载一些配置数据,并将其保存为单个。我强烈建议您查看帖子#37611549,因为它解释了APP_INITIALIZER的使用 - 在应用程序初始化时执行函数,并在函数返回promise时延迟它提供的内容。