如何从服务器注入对象



我正在使用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)
)
)
}
}

最新更新