如何在Angular应用程序的HTML选择/下拉中填充枚举字符串或数字

412 阅读2分钟

Angular populate enum data in dropdown Example

枚举是一个常数的集合。

有时,我们有一个枚举对象,需要在angular应用程序的选择/下拉中提取所有枚举值。

本教程将逐步介绍从enum常量中提取angular下拉值的教程。

让我们为这个例子在typescript中声明枚举类型。

export enum Weeks {
  MONDAY = 1,
  TUESDAY= 2,
  WEDNESDAY = 3,
  THURSDAY = 4,
  FRIDAY = 5,
  SATURDAY= 6,
  SUNDAY= 7,
}

这篇文章将告诉你如何在Angular应用程序的HTML选择/下拉中填充枚举字符串或数字:

  • 使用枚举数据类型的Angular材料下拉菜单
  • 使用枚举值的Html选择

基于枚举值的Angular材料下拉菜单

如上所述,在你的应用程序中安装Angular material npm

npm install @angular/material@13.0.2
npm install @angular/code@13.0.2

这将在package.json中添加以下条目作为依赖关系

"@angular/material":"13.0.2",
"@angular/cdk":"13.0.2",

MatSelectModule 导入到你的模块中MatSelectModule 包含选择下拉相关的类和指令,可以在angular组件中使用。

import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";

import { AppComponent } from "./app.component";
import { HelloComponent } from "./hello.component";
import { MatSelectModule } from "@angular/material/select";

@NgModule({
  imports: [BrowserModule, FormsModule, ReactiveFormsModule, MatSelectModule],
  declarations: [AppComponent, HelloComponent],
  bootstrap: [AppComponent]
})
export class AppModule {}

Enum objects打印出Weeks 对象的以下数据格式enum

{
  '1': 'MONDAY',
  '2': 'TUESDAY',
  '3': 'WEDNESDAY',
  '4': 'THURSDAY',
  '5': 'FRIDAY',
  '6': 'SATURDAY',
  '7': 'SUNDAY',
  MONDAY: 1,
  TUESDAY: 2,
  WEDNESDAY: 3,
  THURSDAY: 4,
  FRIDAY: 5,
  SATURDAY: 6,
  SUNDAY: 7
}

在Typescript组件代码中,Enum ,使用object keys method 。这个方法过滤枚举的数字,只返回字符串来填充到下拉菜单中。同样的逻辑也可以写在构造函数中。

我们还为change1()方法准备了一个事件处理程序,用于跟踪下拉菜单中的选定值。

import { Component } from "@angular/core";
import { Weeks } from "./Weeks";
import { FormGroup, FormControl } from "@angular/forms";
@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent {
  week1 = null;
  weeks = Weeks;
  enumKeys = [];
  constructor() {
    this.enumKeys = Object.keys(this.weeks).filter(f => !isNaN(Number(f)));
  }
    change1(value: string) {
    this.week1 = this.weeks[value];
  }
}

HTML模板组件

在HTML模板中,mat-select被用于下拉。

mat-option 添加了 指令来迭代Enum对象的键 ,用于从组件到视图的双向绑定,以选择下拉值。ngFor ngModel

<mat-form-field>
  <mat-select placeholder="Select Week" [(ngModel)]="week1">
    <mat-option *ngFor="let name of enumKeys" [value]="name">
      {{weeks[name]}}
    </mat-option>
  </mat-select>
</mat-form-field> <br/><br/>
<br>
Selected value is {{week1}}
  

如何选择枚举数据的下拉值

同样可以使用typescript组件。

并使用普通的select 标签的HTML模板。

在普通的HTML select上应用ngFor 指令来迭代所有的enumKeys

<div>
  <select (change)="change($event.target.value)">
    <option>Please Select Week</option>
    <option *ngFor="let name of enumKeys"
        [value]="name">{{weeks[name]}}</option>
  </select>
</div>