0

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

像这样的东西

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

这些方面的东西......但我欢迎其他建议来实现这一点。

4

2 回答 2

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;
    }
}

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

于 2017-11-16T18:53:26.030 回答
0

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

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

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

让我知道,如果这解决了你的问题。

于 2017-11-16T18:54:10.633 回答