angular - 将 environment.ts 传递给 Angular 库模块
问题描述
我正在构建一个 Angular 库,它将公开服务和中间件以在导入其他 Angular 应用程序时执行身份验证。
在尝试将此模块拉入独立的Angular Library之前,它依赖于environment.ts
应用程序中的文件(我只是像这样导入它:)import { environment } from '../../../environments/environment';
。
如何将环境文件传递给现在将导入到我的 Angular 应用程序中的模块?
environment
或者将文件作为 JSON 传递给我要公开的每个服务和中间件是否更好?
解决方案
实现这一点的最佳方法是为您的模块公开一个配置对象,而不是直接使用环境文件。就像是:
import { InjectionToken } from '@angular/core';
export interface LibConfig {
foo: string;
bar: string;
}
export const LibConfigService = new InjectionToken<LibConfig>('LibConfig');
在您的主模块中:
export class LibModule {
static forRoot(config: LibConfig): ModuleWithProviders {
return {
ngModule: LibModule,
providers: [
{
provide: LibConfigService,
useValue: config
}
]
};
}
}
因此,将库添加到项目的模块导入时,您可以执行以下操作:
LibModule.forRoot({
foo: environment.foo,
bar: environment.bar
})
在库中,您可以使用以下内容访问配置:
private libConfig: LibConfig;
constructor(@Inject(LibConfigService) private config) {
this.libConfig = config;
}
public getConfig(): LibConfig {
return this.libConfig;
}
推荐阅读
- reactjs - 更改 s3 存储桶文件时出现 403 禁止错误
- go - 如何使用结构显示所有记录
- flutter - 文本字段光标无法正常工作
- java - DocuSign 自动回复收件人事件
- javascript - 如何在 React Native 中使用相同的 Firebase 数据库在两个应用程序之间进行通信?
- postgresql - Postgres 中的部分索引
- bash - bash:当前缀太短时,使用重命名以左填充文件名为零
- lora - 如何在 google-iot 核心中设置 LORA/LORAWAN 终端设备
- firebase - NextJS:访问 Google Firestore 数据
- ruby-on-rails - 推送到 Heroku 时 webpacker 不会编译