Почему я получил эти ошибки «Нет доступа к значению для элемента управления формы с путем:« rowDetails -> 0 -> no »» - PullRequest
0 голосов
/ 08 января 2020

мы экспериментируем с некоторой ошибкой, когда пытаемся использовать formGroup. Мне нужны пояснения по поводу формы группы. Я хочу создать группу форм с данными. Данные должны отображаться построчно. мы используем angular 8 при его запуске, я получил эту ошибку:

Нет доступа к значению для элемента управления формы с путем: 'rowDetails -> 0 -> нет '

У меня есть этот конструктор компонента:

 constructor(
    public fb: FormBuilder
    ) { 
      this.summaryForm = this.fb.group({
        rowDetails: this.fb.array([])
      })
    }

У меня есть этот контроллер компонента:

ngOnInit() {
    this.productList = (this.selectedReceiptBatch.incomeSummary as SaleSummary).sales;
    this.summaryForm = this.fb.group({
      rowDetails: this.fb.array(
        this.productList.map(x=> this.fb.group({
              'no': x.product.code,
              'desc': x.product.productClass,
              'numberx': [x.number.x],
              'numbery': x.number.y,
              'amountz': x.number.z,
              'reference': [x.reference]
        })
      )) 
    });
    console.log(this.summaryForm);
    this.formControlAvailable = true;
  }

HTML:


<div *ngIf="formControlAvailable">

  <div>

    <div [formGroup]="summaryForm">
      <div formArrayName="rowDetails">
        <div *ngFor="let row of summaryForm.controls.rowDetails.controls; let index = index">
          <div [formGroupName]="index">
            <div>
              <span formControlName="no" >{{row.value.no}}</span>
            </div>            
            <div>
              <span *ngIf="row?.product?.code" formControlName="desc" >
                {{row.value.desc}}
              </span>
              <div *ngIf="!row?.product?.code" ngbDropdown class="d-inline-block">
                <mat-form-field>
                  <mat-label>Select an option</mat-label>
                  <mat-select [(value)]="row.product.code" formControlName="desc" >
                    <mat-option *ngFor="let product of cashableProducts" [value]="product.code">
                      {{product.code}}
                    </mat-option>
                  </mat-select>
                </mat-form-field>
              </div>

            </div>
            <div >
              <input type="number" [value]="row.amount.net"
                (change)="row.amount.net = parseNumber($event.target.value);calculate()" 
                formControlName='numberx' />
            </div>
            <div >
              <span formControlName='numbery' >{{ row.value.numbery }}$</span>
            </div>
            <div >
              <span formControlName='numberz' >{{ row.value.numberz }}$</span>
            </div>
            <div >
              <input formControlName='reference' type="text" class="form-control" minlength="0" [(ngModel)]="row.reference" />
            </div>
          </div>
        </div>
      </div>

    </div>
  </div>
</div>

1 Ответ

0 голосов
/ 09 января 2020

Вы можете поместить директиву formControlName только на элемент ввода, select, textarea или компонент, который реализует интерфейс доступа к значению интерфейса

, измените это

<span formControlName="no" >{{row.value.no}}</span>

на элемент ввода, подобный этому

<input type="text" formControlName="no" >

, если вы просто хотите отобразить значение no

{{row.value?.no}}
...