【问题标题】:How to return Injector in subscribtion如何在订阅中返回喷油器
【发布时间】:2023-03-11 20:37:01
【问题描述】:

我正在尝试创建一个表格,当我单击一个按钮时,我会在单击的行下方显示带有注入数据的新组件。问题是我无法在订阅中返回注入器。

这是应该为组件返回 Injector 的方法

getInjector(tableRow: ClientItem) {
    const request: GetTestsRequest = { ccaId: tableRow.clientData.ccaId };
    this.treasuryBackendService.getTests(request).pipe(first()).subscribe(value => {
      console.log('test sub', value.tests);
      return Injector.create({
        providers: [{ provide: TestInject, useValue: value.tests, deps: [] }],
        parent: this.injector
      });
    });
    console.log('Here should i return Injector but with values from subscribe');
}

【问题讨论】:

    标签: angular dependency-injection rxjs observable subscription


    【解决方案1】:

    方法应该返回 Observable,您可以将值映射到使用值和注入器,如下所示:

    interface FooInterface {
      injector: any;
      value: any;
    }
    
    getInjector(tableRow: ClientItem): Observable<FooInterface> {
        const request: GetTestsRequest = { ccaId: tableRow.clientData.ccaId };
        return this.treasuryBackendService.getTests(request).pipe(
          first(),
          map(value => {
            return {
              injector: Injector.create({
                providers: [{ provide: TestInject, useValue: value.tests, deps: [] }],
                parent: this.injector
              },
              value
            }
          })
        )
    }
    

    在您调用此方法并订阅后,您将拥有类似的对象

    this.getInjector(tableRow).subscribe(console.log)
    

    将带有值和注入器实例的 console.log 对象。

    因为订阅是异步的,所以你不能按照自己的方式去做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多