Búsqueda de sitios web

angular - las opciones no se muestran ni se seleccionan en mat-select


Quiero preseleccionar algunas opciones dentro del campo mat-select en mi formulario Angular, así que tengo este código en el archivo typescript:

selectedApps = [];
ngOnInit() {
    const url = this.baseUrl + `/projects/${this.id}`;
    this.httpClient.get(url).subscribe((data: Array<any>) => {
        for (let i=0; i<data['results'][0]['apps'].length; i++) {
            this.selectedApps.push(data['results'][0]['apps'][i]['name']);    
        }
        
    });
}

Aquí está el campo de entrada mat-select:

<div class="col-sm-8 float-left">
  <mat-form-field>
    <mat-select [(value)]="selectedApps" placeholder="Select the associated applications ..." multiple (click)="getAppList();">
      <mat-option *ngFor="let app of appsList?.results" [value]="app.id">
        {{app.name }}
      </mat-option>
    </mat-select>
  </mat-form-field>
</div>

Mi problema es que el valor de selectedApps no se muestra dentro del campo, incluso cuando los valores se añaden correctamente al array. ¿Por qué es eso?

Respuesta #1

Es por los z-index conflictivos. ¿Estás renderizando mat-select dentro de una especie de ventana modal emergente?

Espero que esto funcione:

Pon este estilo en tu hoja de estilos global llamada styles.css o .scss

 .cdk-global-overlay-wrapper, .cdk-overlay-container {
     z-index: 99999 !important;
  }

Respuesta #2

Estás "preseleccionando" nombres

this.selectedApps.push(data['results'][0]['apps'][i]['name']);  

mientras tus opciones contienen identificadores

<mat-option
          *ngFor="let app of appsList?.results" [value]="app.id">{{app.name
        }}</mat-option>

Para que funcione, selectedApps debe mantener los mismos valores que están disponibles en la propiedad mat-option [value]. Después de todo, esto será el valor real de mat-select.

Para ser honesto, yo haría toda la app como un valor ya que no hay razón para tratarlo de otra manera. Esto simplificaría gran parte del código.

Artículos relacionados