Ъглов избор на материал (mat-select) - Как да зададете стойност по подразбиране

Много въпроси обсъждат начина за задаване на стойност по подразбиране, която да се показва в контрола „Избор“, тук излагам случай на форми, управлявани от шаблон на Angular 8, където не мога да получа стойността по подразбиране, показваща се в mat-select, когато бутонът се щракне, дори ако console.log показва правилната стойност:

<mat-select [formControl]="itemControl" required [(value)]="itemValue">
    <mat-option>--</mat-option>
    <mat-option *ngFor="let item of items" [value]="item">{{item}}</mat-option>
</mat-select>

Моята част от кода на компонента е както следва:

export class MyComponent {

  items: string[] = [''];
  itemControl = new FormControl('', [Validators.required]);
  itemValue: string = '';

  myButtonClick(): void {
        this.itemValue = this.getItems()[0];     <--- This returns the first element in a valid array
        console.log(this.itemValue);
      }
}

И така, какво правя грешно?


person Sami-L    schedule 28.02.2020    source източник


Отговори (2)


Тъй като използвате контрол на формуляр, трябва да присвоите стойността по подразбиране на itemControl, например

  this.itemControl.patchValue(this.getItems()[0])

Можете да го присвоите от куката на жизнения цикъл onInit или от api отговора. Така контролата на формуляра може съответно да актуализира стойността. директивата mat-select не поддържа двупосочно обвързване на данни за свойството стойност.

person Anto Antony    schedule 28.02.2020
comment
можете ли да отговорите на това: stackoverflow.com/questions/60465057/ - person Sami-L; 29.02.2020

Пример:

html:

 <form [formGroup]="entregaSelecao">
       <mat-form-field class="form-input">
           <mat-label>Bairro</mat-label>
           <mat-select disableRipple formControlName="bairro">
              <mat-option  *ngFor="let item of bairros" [value]="item">{{item}}</mat-option>
           </mat-select>
       </mat-form-field>
   </form>

.ts:

public enderecoForm: FormGroup;

bairros: string[] = ['bairro 1', 'bairro 2', 'bairro 3'];
ngOnInit() {
    this.entregaSelecao = this.formBuilder.group({
          entregaSelecionado: ['', Validators.required]
    });
}
person klebers    schedule 28.02.2020