флажки угловой реактивной формы

#angular

#угловые

Вопрос:

Я создаю страницу реактивной формы, на которой будет показан список флажков, в списке некоторые элементы должны быть проверены на основе полученных данных.

Данные поступают в 2 разных массива, один из которых содержит все флажки (RULE_LOOKUP_ID, ОПИСАНИЕ), а другой представляет собой просто список идентификаторов, которые были ранее проверены («RULE_IDS»: [1, 3]).

У меня возникли некоторые проблемы с ее отображением, предполагая, что я неправильно настраиваю форму.

Я создаю formgroup как:

   this.ruleAssignmentFormGroup = this.formBuilder.group({
  RULE_LOOKUP_ID: this.detail.RULE_LOOKUP_ID,
  TITLE: new FormControl(this.detail.TITLE),
  checkedRules: this.formBuilder.array([]),
  allRules: []
});
  

Проверенные правила будут содержать идентификаторы тех, которые проверяются, и allRules будут содержать все.

заполняем ее:

         let control = <FormArray>this.ruleAssignmentFormGroup.controls.checkedRules;
    foundItem.RULE_IDS.forEach(x => {
      control.push(this.formBuilder.group({
        RuleLookupChkBox: new FormControl(x),
      }));
    });
  

моя форма выглядит как:

   <form [formGroup]="ruleAssignmentFormGroup" autocomplete="false" novalidate class="form-horizontal">
<div class="card-body form-styles">
  <div class="row">
    <div class="col-md-6">
      <div class="form-group">
        <label>{{ruleAssignmentFormGroup.controls['TITLE'].value}}</label>
      </div>
      <div formArrayName="checkedRules">
        <div class="form-group">
          <div *ngFor="let item of ruleAssignmentFormGroup.get('allRules'); let i=index">
            <div [formGroupName]="i">
              <input type="checkbox" formControlName="RuleLookupChkBox" [value]="item.RuleLookupId">{{item.DESCRIPTION}}
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
  

форма выдает ошибки при ее появлении:

Не удается найти другой поддерживающий объект ‘[object Object]’ типа ‘object’. ngFor поддерживает привязку только к повторяющимся объектам, таким как массивы.

и

Не удается найти элемент управления с путем: ‘checkedRules -> 1’

Не удается найти элемент управления по пути: ‘checkedRules -> 1 -> RuleLookupChkBox’

данные, похоже, правильно заполнены в ruleAssignmentFormGroup. есть ли другой способ заставить это работать?

Комментарии:

1. Вероятно, вы имели в виду ruleAssignmentFormGroup.get('allRules').controls в ngFor

Ответ №1:

  • Вам нужно инициировать все правила как FormArray: this.formBuilder.array([])
  • Я бы поставил * ngIf в тег формы, чтобы убедиться, что он не попытается выполнить рендеринг до возврата данных
    • Предложение: `*ngIf=»foundItem amp;amp; foundItem.RULE_IDS» или вы можете задать логическое значение в конце вызова API и указать это свойство в *ngIf
  • ruleAssignmentFormGroup.get('allRules') вернет экземпляр AbstractControl. Вам нужно установить *ngFor на его элементах управления, которые представляют собой массив.
    • Предложение: *ngFor="let item of ruleAssignmentFormGroup.controls.allRules.controls"