javascript - 如何在 Angular 中为 app.modules.ts 加载环境数据

标签 javascript angular configuration

我需要从包含环境数据的服务中加载数据。我需要 app.modules 中的模块的一些数据.

这是一个小app.modules.ts例子:

import { CustomEnvironmentService } from './CustomEnvironmentService';

let customService: CustomEnvironmentService;

@NgModule({
    declarations: [...],
    imports: [CustomModule.forRoot(customService.ENVIRONMENT_DATA)],
    providers: [...]
})
export class AppModule {}

首先要注意的是 customService.ENVIRONMENT_DATA只是 CustomEnvironmentService 中的公共(public)变量它从名为 env.js 的环境配置文件中获取信息.

问题是当应用程序加载时customService.ENVIRONMENT_DATA是未定义的。这是可以理解的,因为我很确定服务没有初始化并且没有获取数据。

我发现了一个叫做 APP_INITIALIZER 的东西但似乎我可能无法使用它来读取 env.js 中的任何一个文件还是会使用我的CustomEnvironmentService (从 env.js 获取数据)。

我的实现也是基于这篇文章:How to use environment variables to configure your Angular application without a rebuild

有任何想法吗?

最佳答案

使用您链接的文章中的方法,您不能使用 APP_INITIALIZER因为在所有导入的模块都初始化了您已经发现的内容之后,它们会被调用。

由于这种方法只是将环境设置设置为全局窗口属性 __env您可以在 Angular 中定义一个全局常量,从窗口中分配环境设置的值。然后它将在所有应用程序中可用。这也将在应用程序启动时立即可用。

例如,您创建一个 environment-data.ts具有以下内容的文件:

export const ENVIRONMENT_DATA = window['__env'];

然后只需在需要的地方导入常量并使用它。
import { ENVIRONMENT_DATA } from './environment-data';

@NgModule({
    declarations: [...],
    imports: [CustomModule.forRoot(ENVIRONMENT_DATA)],
    providers: [...]
})
export class AppModule {}

关于javascript - 如何在 Angular 中为 app.modules.ts 加载环境数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61123497/

相关文章:

javascript - nw.js 如何让不同窗口的 cookie 分开?

javascript - 当新的浏览器版本出来时,是否有任何不需要更新的 javascript 库?

typescript - Angular 2找不到文件名 'Set'

javascript - 在服务中对列表数组进行排序后, Angular 列表组件未更新

mysql - 未知变量 group_concat_max_len

javascript - 需要了解NodeJS中ReadWrite的流程

javascript - 使用jquery点击图像按钮时控制音频播放器

html - 用颜色填充 mat-table 单元格

ruby-on-rails - 如何为Rails中的Devise设置 key ?

linux - 在 qt linux 中保存配置