如何从服务器注入对象?
How to Inject an Object From the Server?
我正在使用 Angular Universal 从 Express 服务器为我的 Angular 应用程序提供服务。
我的目标是将环境对象(来自服务器)注入我的应用程序。因此我创建了一个 InjectionToken
export const ENVIRONMENT = new InjectionToken('ENVIRONMENT');
并像这样在服务器端提供它:
app.engine(
'html',
ngExpressEngine({
bootstrap: AppProdServerModule,
providers: [{ provide: ENVIRONMENTS, useValue: environments }],
})
);
当应用程序在服务器上 运行 时,像这样访问环境对象工作得很好。但是当应用程序在客户端上运行时,我得到一个 NullInjectionError
.
constructor(@Inject(ENVIRONMENTS) private env) { }
那么将对象从服务器注入到整个应用程序(也包括客户端)的最佳方法是什么
您的客户端应用程序无法在 运行 时间内知道此提供程序的值应该是多少。
如果没有看到整个用例,很难说清楚,但是,当 运行在客户端上时,您可以在 HTTP 请求中设置此提供程序值。像这样:
export class SetEnvServcie () {
constructor(
private httpClient: HttpClient,
private injector: Injector
) { }
setEnv(){
this.httpClient.get('URL_OF_ENV_CONFIG').pipe(
take(1),
tap(config => Injector.create({
providers: [
{ provide: ENVIRONMENT, useValue: config }
]
}, parent: this.injector)
)
)
}
}
我正在使用 Angular Universal 从 Express 服务器为我的 Angular 应用程序提供服务。
我的目标是将环境对象(来自服务器)注入我的应用程序。因此我创建了一个 InjectionToken
export const ENVIRONMENT = new InjectionToken('ENVIRONMENT');
并像这样在服务器端提供它:
app.engine(
'html',
ngExpressEngine({
bootstrap: AppProdServerModule,
providers: [{ provide: ENVIRONMENTS, useValue: environments }],
})
);
当应用程序在服务器上 运行 时,像这样访问环境对象工作得很好。但是当应用程序在客户端上运行时,我得到一个 NullInjectionError
.
constructor(@Inject(ENVIRONMENTS) private env) { }
那么将对象从服务器注入到整个应用程序(也包括客户端)的最佳方法是什么
您的客户端应用程序无法在 运行 时间内知道此提供程序的值应该是多少。
如果没有看到整个用例,很难说清楚,但是,当 运行在客户端上时,您可以在 HTTP 请求中设置此提供程序值。像这样:
export class SetEnvServcie () {
constructor(
private httpClient: HttpClient,
private injector: Injector
) { }
setEnv(){
this.httpClient.get('URL_OF_ENV_CONFIG').pipe(
take(1),
tap(config => Injector.create({
providers: [
{ provide: ENVIRONMENT, useValue: config }
]
}, parent: this.injector)
)
)
}
}