Добавление formcontrol, formgrops и formarray в дублированный HTML angular

Я делаю форму добавления, для чего мне нужны настройки formcontrol, formgroup для всех этих значений, введенных в ts. Может, это нормально. Но здесь у меня все совсем по-другому. У меня есть кнопка добавить, которая дублирует набор форм в HTML. Мне трудно написать логику группы форм и валидаторы в ts для нее. Пожалуйста, помогите, если вы знаете (вы можете по крайней мере сказать мне, как настроить имена элементов управления формой и передать их в ts)

Примечание: пожалуйста, прокомментируйте ниже, если мой вопрос был неясен.

Моя ссылка на stackblitz: https://stackblitz.com/edit/angular-ivy-g8cty1?file=src%2Fapp%2Fapp.component.html.


person Community    schedule 02.12.2020    source источник
comment
Какие валидаторы требуются и где вы сейчас застряли?   -  person Vimal Patel    schedule 02.12.2020
comment
Имя значения и возраст (все поля формы) являются необходимыми валидаторами   -  person    schedule 02.12.2020
comment
Вы можете по крайней мере рассказать мне, как настроить имена элементов управления формой и передать их на ts @VimalPatel   -  person    schedule 02.12.2020
comment
дайте мне немного времени, предоставлю образец кода.   -  person Vimal Patel    schedule 02.12.2020
comment
хорошо, но убедитесь, что существующие функции также работают. Это проблема, с которой я столкнулся @VimalPatel   -  person    schedule 02.12.2020
comment
Каков существующий функционал?   -  person Vimal Patel    schedule 02.12.2020
comment
Когда сумма значений, которые я указываю в поле формы значений, превышает общее значение, указанное выше, появляется сообщение об ошибке.   -  person    schedule 02.12.2020
comment
Позвольте нам продолжить это обсуждение в чате.   -  person    schedule 02.12.2020


Ответы (1)


Вы можете объявить свою FormGroup, как показано ниже.

myForm = new FormArray([]);
addRow() {
    const group = new FormGroup({
      firstName: new FormControl("", [Validators.required]),
      value: new FormControl("", [Validators.required])
    });
    this.myForm.push(group);
}

и вызывать эту функцию всякий раз, когда пользователь нажимает кнопку «Добавить». В шаблоне, чтобы показать форму. Прокрутите FormControl и привяжите его, как показано ниже.

<div *ngFor="let form of myForm.controls;">
    <ng-container [formGroup]="form">
      <div>
        <label>Name</label
        ><input type="text" required formControlName="firstName" />
      </div>
      <span class="text-danger" *ngIf="isInValidFormControl(form,'firstName')">
        Name is required
      </span>
      <div>
        <label>Value</label><input type="text" formControlName="value" />
      </div>
    </ng-container>
</div>

Ваша проверка относительно общего количества будет выглядеть, как показано ниже.

isValidTotal() {
    var values = this.myForm.controls.map((x) =>
      x ? Number(x.value.value) : 0
    );
    let sumTotal = values.reduce((a, b) => a + b);
    return sumTotal <= this.total;
}

И вы можете вызвать это из шаблона вот так.

  <button (click)="addRow()" [disabled]="!isValidTotal()">Add</button>
  <button (click)="submit()" [disabled]="!isValidTotal()">Submit</button>
  <div *ngIf="!isValidTotal()">
    <p>{{errorMessage}}</p>
  </div>

Рабочая песочница

https://codesandbox.io/s/formarraydynamic-rqdhc?file=/src/app/app.component.html.

person Vimal Patel    schedule 02.12.2020
comment
Я решил это по-другому, братан. В любом случае спасибо @vimal - person ; 02.12.2020
comment
Пожалуйста, поделитесь и своим решением. - person Vimal Patel; 02.12.2020
comment
Конечно, я разместил сложный вопрос, вы можете проверить его, братан - person ; 02.12.2020