我试图在响应式表单提交时发送更改事件下拉列表的选定值。根据{{3}}
的答案,我有一个非常类似的无线电工作方案以下是下拉列表的代码
<div class="row" *ngIf="question.controls.type.value === 'dropdown'">
<div class="col-md-12">
<div class="form-group__text select">
<label for="type">{{ question.controls.label.value }}</label>
<br><br>
<select name="value" formArrayName="component" (change)="updateSelection(question.controls.component.controls, $event.target)">
<option
*ngFor="let answer of question.controls.component.controls; let j = index" [formGroupName]="j"
[ngValue]="answer?.value?.value">
{{answer?.value?.value}}
</option>
</select>
</div>
</div>
</div>
我无法在下拉列表中更改选定选项时将表单控件的答案传递给updateSelection。非常感谢任何帮助。
答案 0 :(得分:1)
非常类似于上一个问题,我们在您的数组中迭代表单控件,最初将其全部设置为false
,然后将所选的选项设置为true
。所以模板让我们通过$event.target.value
:
<select name="value" formArrayName="component"
(change)="updateSelection(question.controls.component.controls, $event.target.value)">
<option *ngFor="let answer of question.controls.component.controls; let j = index" [formGroupName]="j"
[ngValue]="answer?.value?.value">
{{answer?.value?.value}}
</option>
</select>
在我们提到的组件中,迭代表单控件并将all设置为false
。 $event.target.value
的值将是字符串值,例如Choice 1
。然后,我们搜索具有该值的表单控件,然后为该特定表单组设置布尔值:
updateSelection(formArr, answer) {
formArr.forEach(x => {
x.controls.selectedValue.setValue(false)
})
let ctrl = formArr.find(x => x.value.value === answer)
ctrl.controls.selectedValue.setValue(true)
}
您的分叉 StackBlitz