Búsqueda de sitios web

javascript - ¿Puede el bucle *for* de la plantilla de Angular recorrer un enum?


Estoy revisando este fragmento de código que es el modelo para un componente de filtro select para Todos:

    export enum VISIBILITY_FILTER {
      SHOW_COMPLETED = 'SHOW_COMPLETED',
      SHOW_ACTIVE = 'SHOW_ACTIVE',
      SHOW_ALL = 'SHOW_ALL'
    }

    export type TodoFilter = {
      label: string;
      value: VISIBILITY_FILTER;
    };

    export const initialFilters: TodoFilter[] = [
      { label: 'All', value: VISIBILITY_FILTER.SHOW_ALL },
      { label: 'Completed', value: VISIBILITY_FILTER.SHOW_COMPLETED },
      { label: 'Active', value: VISIBILITY_FILTER.SHOW_ACTIVE }
    ];

Parece como si todo eso pudiera ser reemplazado por:

export enum VISIBILITY_FILTER {
  SHOW_COMPLETED = 'Completed',
  SHOW_ACTIVE = 'Active',
  SHOW_ALL = 'All'
}

Entonces la propiedad de filtro active simplemente sería tipada por el enum VISIBILITY_FILTER y recorreríamos el enum en la plantilla así (Código pseudo):

    <option *ngFor="let filter of VISIBILITY_FILTER;" [ngValue]="filter">{{VISIBILITY_FILTER[VISIBILITY_FILTER.filter]}}
    </option>

¿Eso parece razonable o me perdí de algo?

Respuesta #1

intentar :

public get visFilterValues() {
  return Object.keys(VISIBILITY_FILTER).map(k => VISIBILITY_FILTER[k]);
}

y

<option *ngFor="let filter of visFilterValues" [ngValue]="filter">{{filter}}</option>