【问题标题】:How to make dynamic form controls?如何制作动态表单控件?
【发布时间】:2020-10-03 19:24:20
【问题描述】:

我想创建一个包含未知数量的表单控件的表单组。 (根据我的数据库)。 我尝试使用FormArrayFormBuilder 来做到这一点,如下所示:

criterions:Criterion[]=[];
fb:FormBuilder= new FormBuilder();
preferencesForm:FormGroup=new FormGroup({
  aliases: this.fb.array([
    this.fb.control('')
  ])
});

get aliases() {
  return this.preferencesForm.get('aliases') as FormArray;
}

  constructor( private service:flightsService) { }

  ngOnInit(): void {
    this.service.getAllCriterion().subscribe(data=>{
      this.criterions=data;
      this.criterions.forEach(a=>this.aliases.push(this.fb.control('')))
    });
  }     

我的 HTML 是:

<div [formGroup]="preferencesForm">
<div formArrayName="aliases">
    <div *ngFor="let alias of aliases.controls; let i=index">
      <label>
        {{criterions[i].criterionName}}
        <mat-radio-group formControlName="i" aria-label="Select an option">
            <mat-radio-button [value]="true"  >want</mat-radio-button>
            <mat-radio-button [value]="false" >don't want</mat-radio-button>
            <mat-radio-button [value]="" >don't care</mat-radio-button>
          </mat-radio-group>
      </label>
    </div>
  </div>
</div>

【问题讨论】:

    标签: html angular typescript forms dynamic


    【解决方案1】:

    在 ts

    constructor(
        private _formBuilder: FormBuilder){
     this.createForm();
    }
    
    createForm(){
    this.preferencesForm=this._formBuilder.group({
    aliases: this._formBuilder.array([])
    })
    }
    
    
    createFormArray() {
        let formGroup = this._formBuilder.group({
          radio: [''],
    
    
        });
    
    
        return formGroup;
      }
    
    
    ngOnInit(): void {
        this.service.getAllCriterion().subscribe(data=>{
          this.criterions=data;
          this.criterions.forEach(a=>this.aliases.push(createFormArray())
        });
    

    在 HTML 中

    <div [formGroup]="preferencesForm">
    <div formArrayName="aliases">
        <div *ngFor="let alias of aliases.controls; let i=index">
          <label>
    
            <mat-radio-group formControlName="radio" aria-label="Select an option">
                <mat-radio-button [value]="true"  >want</mat-radio-button>
                <mat-radio-button [value]="false" >don't want</mat-radio-button>
                <mat-radio-button [value]="" >don't care</mat-radio-button>
              </mat-radio-group>
          </label>
        </div>
      </div>
    </div>
    

    【讨论】:

    • 问题还没有解决...仍然显示错误:Cannot find control with path: 'aliases -> i 我还能做什么?跨度>
    • 在哪一行你在 HTML 和 ts 中遇到错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多