将变量传递给使用forRoot的模块

4
我已经开发了一个使用Angular共享组件的库,并且希望在其中传递配置。
一切基本上与以下内容相同: 通过forRoot传递配置数据 问题是,我需要将用户传递到此模块中,该用户在应用程序启动时获取并保存在Redux状态中。
在导入模块时,是否可以使用forRoot传递带有用户的observable?也许可以通过某种延迟加载“稍后”将某些内容传递给此模块吗?
@select() private user$: Observable<User>

@NgModule({
  imports: [
    LibModule.forRoot({
      user: user$
    })
...
})
1个回答

1
我已经用另一种方式实现了抽象服务获取设置的功能,通过注入我的实现代码。以下是代码:
Lib模块声明:
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) {
}

在使用该库的应用程序中,使用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 {
         ...
    }

你能告诉我解决方案的文档在哪里吗?我想知道在 static forRoot 函数中如何返回 imports - jgu7man
很抱歉,我不太明白你的问题......你能再换个说法吗?说实话,我只是在尝试实验中得出了这个解决方案。 - mdziob
昨天下午之后,我理解了“forRoot”策略,现在我知道它没有意义。很抱歉哈哈。 - jgu7man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接