gpt4 book ai didi

javascript - 使用 forRoot 将变量传递给模块

转载 作者:太空狗 更新时间:2023-10-29 19:31:36 35 4
gpt4 key购买 nike

我在 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com