【问题标题】:Adding formcontrol,formgrops and formarray to duplicated html angular将 formcontrol、formgrops 和 formarray 添加到重复的 html 角度
【发布时间】:2020-12-02 03:57:31
【问题描述】:

我正在做一个 add 表单,我需要为 ts 中输入的所有这些值设置 formcontrolformgroup 设置。它可能是正常的东西。但在这里我有很大的不同。我有一个 add 按钮,它复制了 html 中的一组表单。我发现很难在 ts 中为它编写表单组逻辑和验证器。 如果您知道,请提供帮助(您至少可以告诉我如何设置表单控件名称并将其带到 ts)

注意:如果我的问题不清楚,请在下方评论。

我的 stackblitz 链接:https://stackblitz.com/edit/angular-ivy-g8cty1?file=src%2Fapp%2Fapp.component.html

【问题讨论】:

  • 需要哪些验证器以及您目前遇到的问题?
  • 值名称和年龄是(所有表单字段)所需的验证器
  • 您至少可以告诉我如何设置表单控件名称并将其带到 ts @VimalPatel
  • 给我一些时间,将提供代码示例。
  • 现有的功能是什么?

标签: javascript angular typescript angular-forms formgroups


【解决方案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

【讨论】:

  • 我已经用不同的方式解决了兄弟。无论如何感谢@vimal
  • 也请分享您的解决方案。
  • 当然我已经发布了一个很难的问题,你可以检查一下兄弟
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2020-05-29
  • 2018-07-27
  • 2020-03-20
  • 2018-07-20
  • 2017-10-12
  • 1970-01-01
  • 2018-05-20
相关资源
最近更新 更多