我已经开发了一个库,其中包含Angular中的共享组件,我想在那儿传递配置。
所有内容基本上都与以下内容相同: Pass config data using forRoot
问题是,我需要将用户传递到此模块,该模块在应用程序启动时获取并保存为Redux状态。
在导入模块时是否可以使用forRoot传递给用户可见性?也许可以通过延迟加载将某些内容传递给此模块“稍后”?
@select() private user$: Observable<User>
@NgModule({
imports: [
LibModule.forRoot({
user: user$
})
...
})
答案 0 :(得分:0)
我采用了另一种方式-通过注入抽象服务的实现来获取设置。下面的代码:
库模块声明:
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
]
}
}
}
库服务,我需要用户:
constructor(private settingsService: AbstractGlassLibSettingsService) {
}
在使用lib的应用程序中,带有import的模块声明:
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 {
...
}