在反應形式中,我在 FormArray 中使用 mat-select,因為我只在第二次觸摸時才理解 valueChange 回應。
這是我正在使用的方法:
doSomething(i) {
this.form.at(i).valueChanges.pipe(switchMap((categoryId: any) => {
return this.service.getDataByCategoryTypeAndProperty(categoryId, this.propertyId)
})).subscribe(data =>{
this.gatData = data
})
}
<mat-form-field >
<mat-label>Service </mat-label>
<mat-select formControlName="categoryId" (selectionChange)="doSomething(i)" >
<mat-option *ngFor="let category of Categories" [value]="category.categoryId">{{category.categoryName}}</mat-option>
</mat-select>
</mat-form-field>
我的問題是第一次接觸時 valueChanges 將如何回應,謝謝
uj5u.com熱心網友回復:
您不需要將事件與值更改混合在一起。做任何一個。
保持事件看起來像這樣:
doSomething(i) {
this.service.getDataByCategoryTypeAndProperty(this.form.at(i).value, this.propertyId)
.pipe(take(1))
.subscribe(data => this.gatData = data);
}
為了保留值更改,您可以在表單初始化后設定一次值更改訂閱,例如在 ngOnInit 中。
uj5u.com熱心網友回復:
原因是因為您valueChanges Obsevable僅在selectionChange觸發事件時訂閱。然后,在接下來的訂閱回呼中更改所需的操作。
valueChanges相反,您需要在創建表單后立即訂閱。這樣,您將能夠在第一次更改時立即看到您的更改訂閱效果。
根本不需要selectionChange監聽器,因為您已經在監聽表單更改。
另一方面,如果您堅持使用該selectionChange事件,您只能單獨使用它并在doSomething不訂閱的情況下執行您的操作valueChanges,但是您將失去所有rxjs邏輯優勢 - 例如pipe您在那里使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535097.html
標籤:有角度的角度反应形式
上一篇:角度嵌套回圈重復
