Angular 的循环模板可以循环遍历枚举吗?

Ole*_*Ole 2 javascript typescript angular

我回顾这段位的代码,是一个选择滤波器组件模型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 }
    ];
Run Code Online (Sandbox Code Playgroud)

看起来好像所有这些都可以替换为:

export enum VISIBILITY_FILTER {
  SHOW_COMPLETED = 'Completed',
  SHOW_ACTIVE = 'Active',
  SHOW_ALL = 'All'
}
Run Code Online (Sandbox Code Playgroud)

因此,active过滤器属性将仅由枚举键入VISIBILITY_FILTER,我们将在模板中循环遍历 then enum,如下所示(伪代码):

    <option *ngFor="let filter of VISIBILITY_FILTER;" [ngValue]="filter">{{VISIBILITY_FILTER[VISIBILITY_FILTER.filter]}}
    </option>
Run Code Online (Sandbox Code Playgroud)

这看起来合理还是我错过了什么?

小智 5

尝试:

public get visFilterValues() {
  return Object.keys(VISIBILITY_FILTER).map(k => VISIBILITY_FILTER[k]);
}
Run Code Online (Sandbox Code Playgroud)

<option *ngFor="let filter of visFilterValues" [ngValue]="filter">{{filter}}</option>
Run Code Online (Sandbox Code Playgroud)