Angular 角形阵列不';t渲染工作垫无线电组
这些是不能与formArray正常工作的表单元素。它们进行渲染,但单击按钮不会产生任何效果。如果我在editChoice()事件中设置断点,它似乎不会发生 控件也不会明显改变其按钮状态Angular 角形阵列不';t渲染工作垫无线电组,angular,formarray,Angular,Formarray,这些是不能与formArray正常工作的表单元素。它们进行渲染,但单击按钮不会产生任何效果。如果我在editChoice()事件中设置断点,它似乎不会发生 控件也不会明显改变其按钮状态 <form [formGroup]="myForm" class="dialogContent"> <ng-container formArrayName="choices"> <div class=
<form [formGroup]="myForm" class="dialogContent">
<ng-container formArrayName="choices">
<div class="control" *ngFor="let value of myForm.controls.choices?.value; let i=index">
<ng-container [formGroupName]="i">
<label class="req" [id]="choiceList[i].id + '_label'">
{{ choiceList[i].label }}
</label>
<mat-radio-group attr.aria-label="{{choiceList[i].label}}"
attr.index="{{i}}"
formControlName="choice" [value]=choiceList[i].value?
(click)="editChoice($event)"
attr.aria-labelledby="{{choiceList[i].id + '_label'}}">
<mat-radio-button value="Y">Yes</mat-radio-button>
<mat-radio-button value="N">No</mat-radio-button>
</mat-radio-group>
</ng-container>
</div>
</ng-container>
</form>
要渲染的数组:
choiceList: Array<any> = [
{
value: "Y",
id: "choiceA",
label: "Choice A Text"
},{
value: "N",
id: "choiceB",
label: "Choice B Text"
}
//(and several more like this)
];
choiceList:Array=[
{
值:“Y”,
id:“choiceA”,
标签:“选择文本”
},{
值:“N”,
id:“choiceB”,
标签:“选择B文本”
}
//(还有更多类似的例子)
];
在ngInit中:
const choices = this.myForm.controls.choices as FormArray;
for (let i=0; i < this.choiceList.length; i++) {
choices.push(this.fb.group ({
choice: ['', [Validators.required]]
}));
}
const choices=this.myForm.controls.choices作为FormArray;
for(设i=0;i
没有调试错误,除非有某种方法打开某些东西以不隐藏任何错误。显然,当您循环使用
myForm.controls.choices?.controls
而不是myForm.controls.choices?.value
时,模板中的for循环会导致问题
我真的不能告诉你为什么它不起作用,所以希望有人能插手解释这里发生了什么。在typescript端有一个函数,将对象作为FormArray返回,这也有帮助。当您通过myForm.controls.choices获取它时,它被键入为控件
getChoices(): FormArray {
return myForm.controls.choices as FormArray;
}
这看起来很奇怪:formControlName=“choice”[value]=choiceList[i]。value?(单击)=“editChoice($event)”如果我关闭任何一个选项,它仍然不起作用。无论如何,我是从一个有效的例子中得到的。formControlName=“choice”[value]=choiceList[i]。值?(单击)=“editChoice($event)”我的意思是,这个位没有引号,以一个?[value]=choiceList[i]。值?-试试[value]=“choiceList[i].value”至少有人能指出一个有效的例子。我可以使用普通控件(如基本单选按钮)进行循环工作,但它似乎会搞乱更复杂的项目,如垫子设计。我复制了您的完整示例,并将
值
切换到控件
,这对我来说很有效,也许您的代码中还有其他错误?您可以单击这些控件吗?它们渲染但不工作。是的,使用值
它渲染但不工作,但使用控件
它工作得很好。我认为我的问题是数组列表中没有控件。后来我找到了这样的工作。
getChoices(): FormArray {
return myForm.controls.choices as FormArray;
}