Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 带有表单生成器的被动表单_Angular - Fatal编程技术网

Angular 带有表单生成器的被动表单

Angular 带有表单生成器的被动表单,angular,Angular,获取错误'error error:cannotreadproperty'flag'of undefined',我不理解为什么,正如我在html和js中定义的那样 我的Html <form [formGroup]='formName'> <div formArrayName="Quest"> <div class="form-group"> <label for="flag">Quest1</label> &

获取错误'error error:cannotreadproperty'flag'of undefined',我不理解为什么,正如我在html和js中定义的那样

我的Html

<form [formGroup]='formName'>
  <div formArrayName="Quest">
   <div class="form-group">
     <label for="flag">Quest1</label>
     <input type="radio" class="form-control" value="Y" id="username" name="flag" formControlName = "flag">
     <label for="flag">LastName</label>
     <input type="radio" class="form-control" value="N" id="username" name="flag" formControlName = "flag">
      <input type="text" class="form-control" *ngIf="formName.value.Quest1.flag == 'Y'" id="testName" name="testName" formControlName = "testName">
   </div>
 </div>
</form>     
<button (click)="consoleF(formName.value)">Click</button>                 
<p> value: {{ formName.value | json}}</p>
<p> valid: {{ formName.valid }}</p>`

它不起作用,因为该标志是在表单数组中定义的。您必须迭代每个表单数组控件

试试这个:

组成部分

formName = this.fb.group({
  Quest:  this.fb.array([
    this.fb.group({
      QUESTION_ID: this.fb.control('51'),
      flag: this.fb.control(''),
      testName: this.fb.control('')
    })
  ])

get quests() {
    return this.formName.get('Quest') as FormArray;
}
HTML文件

<div *ngFor="let quest of quests.controls; let i = index">
    <div [formGroupName]="i">
        // similarly you can add other fiels from array
        <input type="radio" class="form-control" value="Y" id="username" name="flag" formControlName = "flag">
    </div>
</div>
有关详细信息,请参阅您可以尝试此代码


有很多方法

在.ts中,返回表单对象

get f() {
   return this.formName.controls;
}
我认为,错误出现在html中

<input type="text" class="form-control" *ngIf="f.Quest.flag == 'Y'" id="testName" name="testName" formControlName = "testName">
get f() {
   return this.formName.controls;
}
<input type="text" class="form-control" *ngIf="f.Quest.flag == 'Y'" id="testName" name="testName" formControlName = "testName">