【发布时间】:2022-01-18 14:59:36
【问题描述】:
我有一个可观察的像
imageOptions$: Observable<BoundImagesToProject[]> = this.imagesService
.getBoundImages({ projectId: this.projectId })
.pipe(map((images) => (images.data)));
在模板中我像这样使用它
<div class="form-field input-group">
<label for="image">Image</label>
<mat-select id="image" class="select--full-width" placeholder="Image" formControlName="image">
<mat-option *ngFor="let image of imageOptions$ | async" [value]="image.imageId">
{{ image.name }}
</mat-option>
</mat-select>
<mat-error *ngIf="createVmForm.get('image').getError('required') && createVmForm.get('image').dirty"
>Field is required</mat-error
>
</div>
现在我想在 TS 文件中使用可观察的 imagesOptions$,例如
this.imageChangeSubscription = this.createVmForm.get('image').valueChanges.subscribe((value) => {
this.selectedImageVolumeSize = this.imagesOptions$ // get array value and match id and get the size.
如果它是一个数组,它会是这样的
this.selectedImageVolumeSize = this.images.find((image) => image.imageId === value).size;
我想在不订阅 imageOptions$ 的情况下执行此操作
有什么办法吗?
【问题讨论】:
-
查看 Rxjs 决策树以评估适合您的用例的最佳运算符:rxjs.dev/operator-decision-tree。最后,您希望将两个 observable 组合起来,以便只有一个订阅。
-
不,没有办法。我建议做一些像
tap(images => this.size = images.find(...).size)这样的黑客攻击是最好的。但是这样的代码将依赖于模板内的订阅
标签: javascript angular typescript rxjs observable