Угловой материал: Mat-выберите поместить formgroup в качестве значения

#angular #angular-material #formgroups

#угловой #угловой-материал #formgroups

Вопрос:

У меня есть объект ContentType

 export interface ContentType {
  code: string;
  label: string;
}
  

Я хочу выбрать этот объект в качестве значения моего mat-select, это formgroup внутри формы, привязка не работает.
Если я помещаю FormControl=ContentType, у меня возникает ошибка, потому что это не FormControl является FormGroup.

 this.formGroup = this.formGroup.group({
    contentType: this.formGroup.group(),
 });


<div form="formGroup">
     <mat-form-field>
        <mat-select [formGroupName]="'contentType'">
          <mat-option [(value)]="contentType" *ngFor="let contentType of contentTypes$ | async"> 
             {{contentType.label}}
          </mat-option>
       </mat-select>
     </mat-form-field>
</div>
  

Что я могу сделать, чтобы хорошо привязать ContentType, спасибо.

Ответ №1:

FormGroups используются только для «группировки» formcontrols. Formcontrol может принимать любое значение, будь то число / строка или сложный объект.

В вашем случае простого FormControl для объекта ContentType должно быть достаточно, и вы можете использовать formControlName внутри вашего шаблона в сочетании с директивой [FormGroup]:

 const fb = new FormBuilder();
this.formGroup = fb.group({
    contentType: defaultValue | null,
 });


<div [formGroup]="formGroup">
     <mat-form-field>
        <mat-select [formControlName]="'contentType'">
          <mat-option [value]="contentType" *ngFor="let contentType of contentTypes$ | async"> 
             {{contentType.label}}
          </mat-option>
       </mat-select>
     </mat-form-field>
</div>