es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Angular Material select no funciona en las opciones de filtrado.

Estoy usando mat select (múltiple) junto con ngx-mat-select-search para buscar los elementos.

https://www.npmjs.com/package/ngx-mat-select-search

Para mostrar los elementos seleccionados, estoy usando material chips.

Ejemplo en vivo: https://ngx-mat-select-search-dy5gaa.stackblitz.io

Enlace de Stackblitz: https://stackblitz.com/edit/ngx-mat-select-search-dy5gaa

Suponga que algunas opciones ya están seleccionadas y busca algo (filtra opciones), luego se borran las opciones seleccionadas pero estoy mostrando los elementos seleccionados en la lista (justo debajo del campo de selección) que permanecen sin cambios. Para chips y lista estoy usando los mismos datos.

Por favor, háganme saber cómo puedo evitar que los elementos seleccionados (chips) desaparezcan.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar la desaparición de los elementos seleccionados (chips) al utilizar mat-select (multiple) junto con ngx-mat-select-search para buscar los elementos, se pueden implementar los siguientes ajustes en el código:

    1. En el archivo HTML, agregar un nuevo div debajo del elemento mat-select donde se mostrarán los elementos seleccionados como chips:
    <mat-form-field>
      <mat-select placeholder="Selecciona una opción" [(ngmodel)]="selectedOptions" [multiple]="true" [searchable]="true" [overlaypanelclass]="selectOverlayPanelClass">
        <ngx-mat-select-search [formcontrol]="optionFilter"></ngx-mat-select-search>
        <mat-option *ngfor="let option of filteredOptions | async" [value]="option">{{option}}</mat-option>
      </mat-select>
    </mat-form-field>
    <div>
      <mat-chip-list>
        <mat-chip *ngfor="let option of selectedOptions" [removable]="true" (removed)="removeOption(option)">
          {{ option }}
          <mat-icon matchipremove="">cancel</mat-icon>
        </mat-chip>
      </mat-chip-list>
    </div>
    
    1. En el archivo component.ts, agregar una nueva función para eliminar una opción seleccionada de la lista de opciones seleccionadas:
    removeOption(option: string): void {
      const index = this.selectedOptions.indexOf(option);
      if (index >= 0) {
        this.selectedOptions.splice(index, 1);
      }
    }
    
    1. En el mismo archivo, modificar la función onSearch para actualizar la lista de opciones seleccionadas con las nuevas opciones filtradas:
    onSearch(searchTerm: string): void {
      this.filteredOptions = this.options$.pipe(
        map(options => options.filter(option => option.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1))
      );
      this.selectedOptions = this.selectedOptions.filter(option => {
        return this.filteredOptionsMap.get(option).toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
      });
    }
    

    Al incorporar estos cambios, se puede evitar la desaparición de los elementos seleccionados (chips) en la lista cuando se filtran las opciones utilizando ngx-mat-select-search.

Comments are closed.