如何在订阅中返回喷油器

时间:2019-08-07 12:31:42

标签: angular dependency-injection rxjs observable subscription

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

这里是应该为组件返回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');
}

1 个答案:

答案 0 :(得分: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对象。

由于订阅是异步的,因此您无法按照自己的方式进行。