【问题标题】:Dynamically creating input forms in Angular2在 Angular2 中动态创建输入表单
【发布时间】:2018-04-12 02:52:52
【问题描述】:

我试图提示用户为他们想要的每一位客人填写一份表格(只是姓名、等级和年龄)。我首先问他们想要多少客人。然后在下一页上,我想向用户显示这么多表单。

像这样:

<ion-list *ngFor="let item of numberOfGuests">
    <ion-item>
      <ion-label>Full name</ion-label>
      <ion-input type="text"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label>Age</ion-label>
      <ion-input type="number"></ion-input>
    </ion-item>
    <ion-item>
      <ion-label>Grade</ion-label>
      <ion-input type="number"></ion-input>
    </ion-item>
  </ion-list>

以上显然行不通。我只是以此为例。我希望根据用户想要带来的客人数量来创建每个列表或输入形式。

这在 Angular 2 中是否可行?是否可以根据数字在html中动态创建表单?

【问题讨论】:

    标签: html angular ionic-framework


    【解决方案1】:

    我会采用反应形式,就像 Ajmal 建议的那样。

    因此,当您拥有应该在模板中呈现多少客人的值时,只需将那么多表单组推送到您的表单数组:

    constructor(public navCtrl: NavController, private fb: FormBuilder) {
      // build form
      this.myForm = fb.group({
        // declare empty form array
        guests: fb.array([])
      })
      // here we push form groups to formarray
      this.addGuests();
    }
    
    addGuests() {
      let formArr = this.myForm.controls.guests as FormArray;
      // 'amountOfGuests' is the amount of guests you want rendered
      for(let i = 1; i <= this.amountOfGuests; i++) {
        formArr.push(this.fb.group({
          fullName: [''],
          age: [''],
          grade: ['']
        }))
      }
    }
    

    然后您只需在模板中迭代表单数组(缩短代码):

    <form [formGroup]="myForm">
      <ng-container formArrayName="guests">
        <ion-list *ngFor="let guest of myForm.controls.guests.controls; let i = index" [formGroupName]="i">
          <ion-item>
            <ion-label>Full name</ion-label>
            <ion-input formControlName="fullName"></ion-input>
          </ion-item>    
        </ion-list>
      </ng-container>
    </form>
    

    这是一个DEMO :)

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2017-05-21
      • 2018-09-14
      • 1970-01-01
      • 2017-03-24
      • 2018-03-11
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多