javascript - Angular 2 如何将配置从 app.module.ts 传递给提供者
问题描述
我正在尝试使用通过构造函数传递的配置文件来制作 angular 2 服务,这样我就可以在它初始化后读取配置并启动代码的其他部分。我正在尝试在 app.module.ts 中创建配置文件,并且槽供应商使用工厂将其传递给我的服务,但我没有运气,我一直在寻找谷歌答案,但我找不到正确的解决方案. 我的代码如下,我创建了配置
app.module.ts
const config = new AuthServiceConfig([
{
id: FacebookLoginProvider.PROVIDER_ID,
provider: new FacebookLoginProvider(),
},
{
id: LinedinLoginProvider.PROVIDER_ID,
provider: new LinedinLoginProvider(),
},
]);
export function provideConfig() {
return config;
}
export function configFactory(config: AuthServiceConfig) {
return config;
}
providers: [
...
{ provide: AuthServiceConfig, useFactory: provideConfig },
{ provide: AuthProvider, useFactory: config },
],
auth.ts
export interface AuthServiceConfigItem {
id: string;
provider: Provider;
}
export class AuthServiceConfig {
providers: Map<string, Provider> = new Map<string, Provider>();
constructor(providers: AuthServiceConfigItem[]) {
for (let i = 0; i < providers.length; i++) {
let element = providers[i];
this.providers.set(element.id, element.provider);
}
}
}
@Injectable()
export class AuthProvider {
private static readonly ERR_LOGIN_PROVIDER_NOT_FOUND =
'Login provider not found';
providers: Map<string, Provider> = new Map<string, Provider>();
constructor(config) {
this.providers = config.providers;
console.log('Ovo su providersi u konstruktoru', this.providers);
}
解决方案
I haven't tried dynamically change providers, but I used the Angular CLI environment files. Based on some flag from the environment file I would instantiate the proper service in the factory function.
Take a look at the app.module.ts and product.factory.ts here: https://github.com/Farata/angulartypescript/tree/master/code-samples/Angular6/chapter5/di-samples/src/app/factory
推荐阅读
- java - BDD Cucumber Maven Junit Parralel执行不起作用
- json - Flutter 如何存储从 DropdownButton 中选择的值?
- javascript - ReactJS — 如何在类组件中使用交集观察器?
- user-interface - 选择新选项卡时更改 AppBar 颜色 (Flutter)
- c - 了解变量在 C 中作为数组大小的用法
- python - 使用 Sympy 时的非交换生成器
- c# - 我可以用扩展方法字典映射吗
到字典 ? - unity3d - 如何在远程移动 AR 应用上从浏览器中画线?
- reactjs - 循环设置状态反应+火库
- r - predict() 应该显示一个值,但生成的值太多