我在 Angular 中开发了一个包含共享组件的库,我想在那里传递配置。
一切都与以下内容基本相同: Pass config data using forRoot
问题是,我需要将用户传递给这个模块,它在应用程序启动时获取并保存在 Redux 状态。
是否可以在导入模块时使用 forRoot 向用户传递 observable?也许可以通过延迟加载“稍后”将某些内容传递给此模块?
@select() private user$: Observable<User>
@NgModule({
imports: [
LibModule.forRoot({
user: user$
})
...
})
最佳答案
我采用了另一种方式 - 通过注入(inject)我的抽象服务实现来获取设置。代码如下:
库模块声明:
export interface LibSettings {
user: User;
url: string;
}
export abstract class AbstractLibSettingsService {
abstract getSettings(): LibSettings;
}
@NgModule({
declarations: [...],
imports: [...],
exports: [...]
})
export class LibModule {
static forRoot(implementationProvider: Provider): ModuleWithProviders {
return {
ngModule: LibModule,
providers: [
implementationProvider
]
}
}
}
Lib 服务,我需要用户的地方:
constructor(private settingsService: AbstractGlassLibSettingsService) {
}
在使用 lib 的应用程序中,模块声明与导入:
export const LIB_SETTINGS_PROVIDER: ClassProvider = {
provide: AbstractLibSettingsService,
useClass: LibSettingsService
};
@NgModule({
imports: [...
LibModule.forRoot(LIB_SETTINGS_PROVIDER)
],
...
})
最后,服务在应用中的实现:
@Injectable()
export class LibSettingsService extends AbstractLibSettingsService {
@select() private user$: Observable<User>;
private user: User;
constructor() {
super();
this.user$.subscribe(user => this.user = user);
}
public getSettings(): GlassLibSettings {
...
}
关于javascript - 使用 forRoot 将变量传递给模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57308216/