在Angular中如何创建可配置属性文件以在生产环境中读取属性?

时间:2017-12-04 17:45:58

标签: angular

在我的应用程序中,我创建了appMessages.ts,它包含一个变量,如:

export const appMessages = {
    my_url: 'http://localhost:8080/myApp',
}

我基本上使用它来进行REST调用。在实际生产环境中,变量值不断变化,需要配置。如果我使用appMessages.ts,并使用

创建一个生产包
ng build --prod

问题是,appMessages.ts不再可配置。是否有Angular方法来创建可配置属性文件,可以使用'my_url'动态配置,具体取决于当前的开发环境?

某种属性文件可以在产品部署后读取吗?

1 个答案:

答案 0 :(得分:0)

您可以在src目录中创建以下config.json,然后使用APP_INITIALIZER提供程序。

{
    "myUrl": "http://172.22.251.207:20235"
}

app.module.ts

...
export function initConfig(config: AppConfigService) {
  return () => config.load();
}
...
providers: [
    {
      provide: APP_INITIALIZER,
      useFactory: initConfig,
      deps: [AppConfigService],
      multi: true
    }]
...

app-config.service.ts

@Injectable({
    providedIn: 'root'
})
export class AppConfigService {
    private config: Config = null;
    public configSubject: Subject<any> = new Subject<any>();

    constructor(private http: HttpClient) { }

    public load() {
        return this.http.get(environment.deployUrl + 'config.json')
            .toPromise()
            .then((config: any) => {
                this.config = config;
                this.configSubject.next(this.config);
            })
            .catch((err: any) => {
                console.error('ERROR: ' + err);
            })
    }

    getMyUrl() {
        return this.config.myUrl;
    }
}

export class Config {
    myUrl: string;
}