向Angular中的反应形式动态添加控件的问题

时间:2017-10-18 09:41:10

标签: angular angular-reactive-forms

我正在研究Angular Reactive表单。我想动态添加控件以形成。但是当我添加一个控件时,它首次添加两次我不知道为什么,之后它工作正常。这是代码:

<form [formGroup]="reviewForm" >        
    <span *ngIf="isClicked">              
        <div formArrayName="controlArray">
            <div 
              class="form-group"
              *ngFor="let control of reviewForm.get('controlArray').controls; let i = index">            
              <label>{{label}} </label>                                      
              <input 
                type="{{control.value}}"                       
                class="form-control"                                        
                [formControlName]="i" >                       
            </div>  
        </div>  
    </span>
    <button type="button" (click)="addControl()">Add</button>         
</form>

组件类代码,addControl()在Add按钮单击事件:

上调用
import { Component, OnInit } from '@angular/core';
import { FormGroup, FormArray, FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {  
  reviewForm: FormGroup;
  inputArray: string[] = [
    'text', 'radio', 'checkbox', 'select', 'textarea', 'button'
  ];

  selectedControl: string = '';   
  isClicked:boolean= false;
  label: string;
  isRequired:boolean = false;
  placeHolderValue: string = "";
  ngOnInit(){
    this.reviewForm = new FormGroup({   
      // 'placeHolder' : new FormControl(null),   
      'controlArray': new FormArray([
        new FormControl(null)
    ])
    });
  }

  addControl(){    
      this.isClicked = true;
      const control = new FormControl(this.selectedControl);
      (<FormArray>this.reviewForm.get('controlArray')).push(control);      
      // console.log(this.selectedControl);      
    }  

  onSubmit(){
    console.log(this.reviewForm);
  }
}

1 个答案:

答案 0 :(得分:1)

发生的事情是非常正常,因为当创建了你的componentsnet时,isClicked = false和你的formArray已经包含一个FormControl,它在开头没有显示因为这种情况:<span *ngIf="isClicked">

当您向FormArray添加新控件时,现在它包含两个FormControlisClicked变为true,并显示两个formControl

这就是这种行为的原因

希望有所帮助:)