【问题标题】:Angular formArray radio buttonsAngular formArray 单选按钮
【发布时间】:2018-07-19 16:06:58
【问题描述】:

我正在尝试将单选按钮组添加到 FormArray。问题是当我选择一个值时,它会更改 FormArray 的每个成员的值。我知道这与 formControlName 有关,但我不知道如何使 formControlName 动态。我看过this post,但它已经 4 岁了,有点模糊;即,我无法从中得出明确的答案。

这是我目前拥有的:

TS 组件

//inputs and variable initialization

ngOnInit() {
  this.createSensorForm();
}

createSensorForm() {
    this.sensorForm = this.fb.group({
      ...
      definitions: this.fb.array([this.createDefinition()])
  });
}

createDefinition(): FormGroup {
  return this.fb.group({
    numeric: [""],
  });
}

addDefinition() {
  this.definitions = this.sensorForm.get('definitions') as FormArray;
  this.definitions.push(this.createDefinition());
}

HTML 组件

<form [formGroup]="sensorForm" (ngSubmit)="createSensor()">
  ...
  <div formArrayName="definitions" 
       *ngFor="let definition of sensorForm.get('definitions').controls; let i = index;">
    <div [formGroupName]="i">
      ...
      <input type="radio" [value]="true" 
             formControlName="numeric" [(ngModel)]="numeric"> Yes
      <input type="radio" [value]="false" 
             formControlName="numeric" [(ngModel)]="numeric"> No
    </div>
  </div>
    <button class="btn btn-primary" type="button" (click)="addDefinition()">
      <i class="fa fa-plus"></i> Add Definition
    </button>
</form>

【问题讨论】:

    标签: angular


    【解决方案1】:
    <div *ngIf="sensorForm"  [formGroup]="sensorForm" (ngSubmit)="createSensor()>
      <!---first the name of array-->
      <div formArrayName="definitions">
          <!--after the loop using a div, this div has [fromGroupName]=i -->
          <div *ngFor="let definition of sensorForm.get('definitions').controls; 
                      let i = index;" [formGroupName]="i">
              <!--each element, only use formControlName, ¡NOT! [(ngModel)] -->
              <!-- ngModel is for Template driven Form  -->
              <input type="radio" [value]="true" formControlName="numeric" > Yes
              <input type="radio" [value]="false" formControlName="numeric" > No
          </div>
      </div>  
    </div>
    

    你的 addDefinition 错误,你没有“this.definitions”

    addDefinition() {
        const definitions = this.sensorForm.get('definitions') as FormArray;
        definitions.push(this.createDefinition());
      }
    

    【讨论】:

    • 工作就像一个魅力。谢谢一百万!
    • 小心,我更新了答案,将代码添加到 addDefinition
    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 2019-08-18
    • 2022-08-23
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多