Ionic 3 Formarray проверить динамические группы переключателей - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь проверить группу радиокнопок, которая динамически создается из объекта массивов, и я хочу, чтобы она была проверена в форме, я отправил вопрос в поисках ответа, и я не получил разъяснений, снова провел какое-то исследование и обнаружил это статья проследила за своим следом и нашла formArrayName, но не смогла добиться проверки

<form[formGroup]="form">
  <ion-select formControlName="type">
    <ion-option value="1">Full Time</ion-option>
    <ion-option value="2">Part Time</ion-option>
  </ion-select>

  <div formArrayName="employee_details">
    <ion-row class="rows" *ngFor="let employee of employee;  let rowIndex = index">
      <ion-col text-center="text-center" col-6="col-6">
        [ {{employee.id}} ]
        <br> {{employee.name}}
      </ion-col>
      <ion-col class="rows last" col-6="col-6">
        <ion-list class="row" no-lines="no-lines" radio-group="radio-group">
          <ion-item col-4="col-4">
            <ion-radio class="radio " mode="md" value="Paid"></ion-radio>
          </ion-item>
          <ion-item col-4="col-4">
            <ion-radio class="radio " mode="md" value="Unpaid"></ion-radio>
          </ion-item>

        </ion-list>
      </ion-col>
    </ion-row>
  </div>

</form>

JS

import { FormBuilder, FormGroup, FormControl,FormArray, Validators } from '@angular/forms ';

class type {
  public name: string;
  public id: string;
}
...
class employee {
  public name: string;
  public id: string;
}
...
employee: employee = [{
  id: 1,
  name: "emp1"
}, {
  id: 2,
  name: "emp2"
}, {
  id: 3,
  name: "emp3"
}];
form: FormGroup;

this.form = new FormGroup({
  'type': new FormControl(null, [Validators.required]),
  'employee_details': new FormArray([])
});
Object.keys(this.employee).forEach(function(key, index) {
  console.log(key);
  // problem is here 
  const control = new FormControl(null, Validators.required);
  ( < FormArray > this.form.get('employee_details')).push(control);

});

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Это не formArray, но он определенно поможет вам ..

.html

<form [formGroup]="form">
<ion-row class="rows" *ngFor="let detail of details; let i = index">
    <ion-col text-center="text-center" col-6="col-6">
        {{your_data}}
    </ion-col>
    <ion-col class="rows last" col-6="col-6">
        <ion-list class="row" no-lines="no-lines" radio-group="radio-group" formControlName="action{{i}}">
            <ion-item col-4>
                <ion-radio class="radio true" mode="md" value="true"></ion-radio>
            </ion-item>
            <ion-item col-4>
                <ion-radio class="radio false" mode="md" value="false"></ion-radio>
            </ion-item>
            <ion-item col-4>
                <ion-radio class="radio " mode="md" value="not sure"></ion-radio>
            </ion-item>
        </ion-list>
    </ion-col>
</ion-row>
<button ion-button (click)="submit()" [disabled]="!form.valid">Submit</button>
</form>

.ts Добавьте этот код туда, где вы получаете данные.

let i;
for(i in this.details){
  this.form.setControl('action'+i, new FormControl('', Validators.required));
}

переменная 'i' просто используется для получения 0,1,2,3 для добавления с именем элемента управления.Вы можете использовать свой способ сделать это, но цикл необходим.

0 голосов
/ 26 октября 2018

Вместо того, чтобы делать то, что вы делаете прямо сейчас, вы можете просто map через массив и затем для каждого элемента просто создать FormControl

Попробуйте это:

this.form = new FormGroup({
  type: new FormControl(null, [Validators.required]),
  employee_details: new FormArray([this.employee.map(emp => new FormControl(null, Validators.required))])
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...