我需要从包含环境数据的服务中加载数据。我需要 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/