首页 > 解决方案 > *ngFor 带子数组

问题描述

(对不起这个主题,但我不认为其他任何事情)

您好,我通过以下方式获取 JSON 数据:

{
(... some stuff...)

"credentials": {
    "credential": [{
        "username": "Peter",
        "password": "dummy1"
    }, {
        "username": "Marc",
        "password": "dummy2"
    }, {
        "username": "Oliver",
        "password": "dummy3"
    }, {
        "username": "Tom",
        "password": "dummy4"
    }, {
        "username": "Brian",
        "password": "dummy5"
    }]
}

}

我想用 *ngFor 显示它们,如下所示:

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

@Component({
  selector: 'my-app',
  template: `
    <form [formGroup]="form">
      <input type="checkbox" formControlName="published"> Published
      <div *ngIf="form.controls.published.value">

        <h2>Credentials</h2>
        <button (click)="addCreds()">Add</button>

        <div formArrayName="credentials" *ngFor="let creds of form.controls.credentials?.value; let i = index">
          <ng-container [formGroupName]="i">
            <input placeholder="Username" formControlName="username">
            <input placeholder="Password" formControlName="password">
          </ng-container>
        </div>

      </div>
    </form>
  `,
})
export class AppComponent  {
  form: FormGroup;

  constructor(private fb: FormBuilder) {
    this.form = this.fb.group({
      published: true,
      // credentials: {credential: new FormArray([])}
      credentials: {credential: this.fb.array([])}
    });
  }

  addCreds() {
    const creds = this.form.controls.credentials as FormArray;
    // const creds = this.form.controls.credentials.value.credential as FormArray;
    creds.push(this.fb.group({
      username: '',
      password: '',
    }));
  }
}

但这不起作用。:-( 问:我如何credentials使用 *ngFor 显示所有内容?对我来说重要的是在这种情况下只有 *ngFor。

在此先感谢您并问候 Filout

标签: angularngforformarray

解决方案


写在ts。

this.form = this.fb.group({
  published: true 
  credentials: this.fb.array([])}
});

 get credentials() {
      return this.form.get('credentials') as FormArray

在 html 中

*ngFor="let creds of credentials?.controls; ......

推荐阅读