我试图制作一个表,当我单击按钮时,在单击的行下方显示带有注入数据的新组件。问题是我无法在订阅中返回注射器。
这里是应该为组件返回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');
}
答案 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对象。
由于订阅是异步的,因此您无法按照自己的方式进行。