全局提供者可配置一次
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,请从您要注入此服务的组件中进行设置。看看上面的答案,它一定给了你正在寻找的解决方案。
如果这能解决您的问题,请告诉我。
我正在尝试创建一个配置服务,该服务可以被赋予一个环境值,然后它会使用该环境值来返回适当的配置值。
像这样
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,请从您要注入此服务的组件中进行设置。看看上面的答案,它一定给了你正在寻找的解决方案。
如果这能解决您的问题,请告诉我。