将 formControlName 设置为模板变量

Set formControlName to Template Variable

我正在 Angular v12 项目中工作。我有一个包含许多控件的表单。在我的模板中,我正在创建循环来显示这些控件。控件显示在不同位置的块中(因此所有外部 div 都很重要)。

当我用跨度设置这些循环时,它工作正常并显示我需要的控制值:

<div class="d-flex" *ngFor="let rowGroup of rowGroups">
   <div class="square" *ngFor="let group of rowGroup">
      <div class="d-flex" *ngFor="let i of [1,2,3]">
         <div class="block" *ngFor="let j of [1,2,3]">
            <span>
              {{this.form.get(group+'-'+i+'-'+j)?.value}}
            </span>
         </div>
      </div>
   </div>
</div>

但是现在,我希望能够使用 material 输入,而不是跨度。但我需要能够将 formControlName 设置为模板变量 (group+'-'+i+'-'+j).

<div class="d-flex" *ngFor="let rowGroup of rowGroups">
   <div class="square" *ngFor="let group of rowGroup">
      <div class="d-flex" *ngFor="let i of [1,2,3]">
         <div class="block" *ngFor="let j of [1,2,3]">
            <mat-form-field appearance="outline">
               <input matInput formControlName="{{VARIABLE(group+'-'+i+'-'+j) HERE?}}">
            </mat-form-field>
         </div>
      </div>
   </div>
</div>

有办法吗?

您只需将其绑定为:

formControlName="{{group+'-'+i+'-'+j}}"

所以您的 html 将如下所示:

<form [formGroup]="form"> <!-- You would need this binding too  -->
  <div class="d-flex" *ngFor="let rowGroup of rowGroups">
    <div class="square" *ngFor="let group of rowGroup">
      <div class="d-flex" *ngFor="let i of [1,2,3]">
        <div class="block" *ngFor="let j of [1,2,3]">
          <mat-form-field appearance="outline">
            <input matInput formControlName="{{group+'-'+i+'-'+j}}">
          </mat-form-field>
        </div>
      </div>
    </div>
  </div>
</form>

PS: 如果 {{this.form.get(group+'-'+i+'-'+j)?.value}} 对你有效,以上应该有效。如果它不起作用,请分享在 ts 文件中定义的 form FormGroup 结构。