全局提供者可配置一次

Global provider configurable once

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

像这样

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

类似的东西...但我欢迎其他建议来完成此任务。

我在构建我的应用程序时不知道如何执行此操作,但如果我今天开始,我将如何解决您的问题:

有一个配置文件可以导出您 select 的配置,以及一个通用接口。我们称它为 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;
    }
}

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

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

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

如果您想设置 env,请从您要注入此服务的组件中进行设置。看看上面的答案,它一定给了你正在寻找的解决方案。

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