Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角形阵列不';t渲染工作垫无线电组_Angular_Formarray - Fatal编程技术网

Angular 角形阵列不';t渲染工作垫无线电组

Angular 角形阵列不';t渲染工作垫无线电组,angular,formarray,Angular,Formarray,这些是不能与formArray正常工作的表单元素。它们进行渲染,但单击按钮不会产生任何效果。如果我在editChoice()事件中设置断点,它似乎不会发生 控件也不会明显改变其按钮状态 <form [formGroup]="myForm" class="dialogContent"> <ng-container formArrayName="choices"> <div class=

这些是不能与formArray正常工作的表单元素。它们进行渲染,但单击按钮不会产生任何效果。如果我在editChoice()事件中设置断点,它似乎不会发生

控件也不会明显改变其按钮状态

<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; 
}