全球提供商可配置一次

时间:2017-11-16 18:07:19

标签: angular angular5

我正在尝试创建一个配置服务,该服务可以被赋予一个环境值,然后用它来回吐适当的配置值。

像这样的东西

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

@Injectable()
export class ConfigService {
private env: string;    

SetEnv(value: string) {
    this.env = value;
}

Get() {
    let rtrn;

    if (this.env == "DEV") {
        rtrn = {
            api: "http://localhost:60517/api/"
        }
    }
    else if (this.env == "TEST") {
        rtrn = {
            api: "http://test:60517/api/"
        }
    }
    else { }

    return (rtrn);
}
}

app.module.ts

中跟着此
providers: [
    ConfigService.SetEnv("DEV"),
    ....
]

然后在注入组件后以下列方式使用 ConfigService.Get().api

以上示例引发错误:app.module.ts:64 Uncaught TypeError: __WEBPACK_IMPORTED_MODULE_12__services_config_config_service__.a.SetEnv is not a function

有些事情......但我欢迎其他建议来实现这一目标。

2 个答案:

答案 0 :(得分:1)

当我构建我的应用程序时,我不知道该怎么做,但如果我今天开始,这就是我将如何解决你的问题:

具有导出所选配置的配置文件以及通用接口。我们称之为 config.ts

import { InjectionToken } from '@angular/core';
export interface IConfig {
  api:string,
  env?:string
};
const DEV_CONFIG:IConfig = {
  api:'http://dev.endpoint.com',
  env:'DEV'
};
const TEST_CONFIG:IConfig = {
  api:'http://test.endpoint.com',
  env:'TEST'
};
export const CONFIG_TOKEN = new InjectionToken<IConfig>('config.token');
export const CONFIG_PROVIDER = {
  provide:CONFIG_TOKEN,
  useValue:TEST_CONFIG // <- choose the configuration here
}

将导出的提供程序添加到模块的providers数组:

providers: [CONFIG_PROVIDER]

最后,在组件中,以这种方式注入配置:

export class AppComponent {
  config:IConfig;

  // Inject is imported from @angular/core  
  constructor(@Inject(CONFIG_TOKEN)config:IConfig){ 
    this.config = config;
    }
}

现在您可以访问组件中的配置。

答案 1 :(得分:0)

你不能将提供者的方法调用到app.module:这是错误的。

providers: [
ConfigService.SetEnv("DEV"),
....
 ]

如果要设置env,请从注入此服务的组件中进行设置。看看上面的答案,它必须为您提供您正在寻找的解决方案。

如果这可以解决您的问题,请告诉我。