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

标签 javascript angular typescript redux

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

相关文章:

javascript - knockoutjs 从 root-viewModel 调用子 viewModel 中定义的函数

inheritance - typescript 子类函数重载

javascript - PassportJS 和 Express 4 没有正确保存 cookies/session

TypeScript 3.0 `unknown` 类型作为 `any` 或 `generics` 的替代?

javascript - Jquery翻转但不是同一个 child ?

javascript - 想在jquery中实现单面翻书动画

javascript - ng-if 条件无法正常工作 [AngularJS]

javascript - 下划线 groupby 返回数组而不是对象

Angular 6 : Adding @Input to component doesn't work

angular - 在 Angular 6 的虚拟文件系统中找不到文件 'Roboto-Regular.ttf' (pdfMake)