简体   繁体   English

动态地将多个输入字段添加到具有离子/角度的表单中

[英]Dynamically add multiple input fields to a form with ionic/angular

I'm having an issue adding multiple input fields to a form. 我在向表单添加多个输入字段时遇到问题。 I followed this example but I'm facing problems with more than one input field. 我遵循了这个示例,但是我面临着多个输入字段的问题。 Any advice? 有什么建议吗?

My form input 我的表格输入

<ion-list>
      <ion-row>
            <ion-col>
                 <form [formGroup]="slideThreeForm" class="ion-padding ion-margin">

                    <ion-item *ngFor="let control of slideThreeForm.controls | keyvalue">
                    <ion-input required type="text" [formControlName]="control.key" placeHolder="Name"></ion-input>
                    <ion-input required type="text" [formControlName]="control.key" placeHolder="Price"></ion-input>
                    <ion-input required type="number" [formControlName]="control.key" placeHolder="Quantity"></ion-input>
                    <ion-icon (click)="removeControl(control)" name="close-circle"></ion-icon>
                    </ion-item>

                 </form>
                    <ion-button expand="full" color="light" (click)="addControl()">Add Item</ion-button>
            </ion-col>
      </ion-row>
</ion-list>

page.ts page.ts

export class ModalSlidePage  {
@ViewChild('quoteSlider') quoteSlider;

public slideOneForm: FormGroup;
public slideTwoForm: FormGroup;
public slideThreeForm: FormGroup;
private itemCount: number = 1;


public submitAttempt: boolean = false;

modalTitle:string;

constructor(
  private modalController: ModalController,
  public formBuilder: FormBuilder
) {
  this.slideOneForm = formBuilder.group({
  companyName: [''],
  quoteType: [''],
  quoteDueDate: ['']
});

this.slideTwoForm = formBuilder.group({
  companyAddress: [''],
  clientAddress: [''],
  comments: ['']
});

this.slideThreeForm = formBuilder.group({
  item1: ['']
  });
 }


async closeModal() {
const onCloseData: string = "Wrapped Up!";
await this.modalController.dismiss(onCloseData);
}

addControl(){
this.itemCount++;
this.slideThreeForm.addControl('item' + this.itemCount, new 
FormControl(''));
 }

removeControl(control){
this.slideThreeForm.removeControl(control.key);
}

Right now only one value is returned on addControl. 现在,addControl仅返回一个值。 I need to display all three values. 我需要显示所有三个值。 Any help would be much appreciated. 任何帮助将非常感激。

You are currently repeating the same formControlName for each input. 您当前正在为每个输入重复相同的formControlName。 I'm not sure whether this exact syntax will work for dynamic formControlNames, but this will explain the idea: 我不确定这种确切的语法是否适用于动态formControlNames,但这将解释这个想法:

<ion-list *ngFor="let control of slideThreeForm.controls | keyvalue">
  <ion-item>
    <ion-label>{{ control.key }} Name</ion-label>
    <ion-input required type="text" formControlName="{{ control.key }}_name" placeHolder="Name"></ion-input>
  </ion-item>
  <ion-item>
    <ion-label>{{ control.key }} Price</ion-label>
    <ion-input required type="text" formControlName="{{ control.key }}_price" placeHolder="Price"></ion-input>
  </ion-item>
  <ion-item>
    <ion-label>{{ control.key }} Quantity</ion-label>
    <ion-input required type="number" formControlName="{{ control.key }}_quantity" placeHolder="Quantity"></ion-input><ion-icon (click)="removeControl(control)" name="close-circle"></ion-icon>
  </ion-item>
</ion-list>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM