Angular2在html值属性中使用枚举值

won*_*yte 17 enums typescript angular

我正在尝试使用枚举值来设置HTML属性的选定值:

export enum MyEnum {
    FirstValue,
    SecondValue
}
export function MyEnumAware(constructor: Function) {
    constructor.prototype.MyEnum = MyEnum;
}

@MyEnumAware
@Component({
    templateUrl: "./lot-edit.component.html",
    styleUrls: ["./lot-edit.component.css"],
})
export class LotEditComponent implements OnInit {
    @Input() myEnumValue: MyEnum ;
Run Code Online (Sandbox Code Playgroud)

}

<td><input name="status" type="radio" [value]="MyEnum.FirstValue" [(ngModel)]="myEnumValue"></td>
<td><input name="status" type="radio" [value]="MyEnum.SecondValue" [(ngModel)]="myEnumValue"></td>
Run Code Online (Sandbox Code Playgroud)

但是我得到"无法读取未定义的属性'FirstValue'"

有没有办法使用枚举值作为html属性的值?

sno*_*ete 34

您的模板只能访问其组件类的成员变量.因此,如果要使用枚举值,请将其(Enum)分配给成员变量.

在您的组件中,

export class MyComp {
  MyEnum = MyEnum;
  .....
}   
Run Code Online (Sandbox Code Playgroud)

然后,您可以自由访问模板中枚举的元素.

  • 你可以做MyEnum:typeof MyEnum = MyEnum; 保持它的安全. (4认同)
  • 这是正确的做法吗?我不会这么说。 (3认同)
  • 我听到你关于一个不包含枚举作为属性的组件的观点,特别是因为从技术上讲,枚举在设计方面并不属于组件类.但我对这个具体问题的看法是,在大多数情况下,组件类的作用是向模板公开数据和功能以供其使用.是的,你可以将枚举包装在一个方法中以便更多地隔离它但是我不确定额外的仪式会给你带来什么,除了更多的样板代码.枚举只是一个常量列表......改变的风险是什么? (2认同)