How to access an enum value in an Angular 5 view
我目前在我的
1 2 3 | if (this.nodeType === NodeType.HostService) { ... } |
我有一个枚举定义为:
1 2 3 4 5 6 7 | export enum NodeType { Location, Host, HostAccessPoint, HostStorage, HostService } |
在我的HTML视图中,我在一个模式中加载特定的组件(包括反应形式),如下所示——这一切都取决于
1 2 3 4 5 6 7 8 9 | <config-edit-storage-node *ngIf="selectedNode && selectedNodeTypeEnum===3" [node]="selectedNode" [nodeType]="selectedNodeTypeEnum" (cancelEdit)="cancelEdit()" (saveEdit)="onSaveEdit($event)"> </config-edit-storage-node> <config-edit-service-node *ngIf="selectedNode && selectedNodeTypeEnum===4" [node]="selectedNode" [nodeType]="selectedNodeTypeEnum" (cancelEdit)="cancelEdit()" (saveEdit)="onSaveEdit($event)"> </config-edit-service-node> |
在我的组件中,我正在设置它。SelectedNodeTypeNum:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | export class ConfigNetworkTreeComponent implements OnInit { selectedNode: INode; selectedNodeTypeEnum: NodeType = null; selectedNodeTypeStr: string; setNodeEvents() { let selectedObj = that.getSelectedNode(nodeID); that.selectedNode = selectedObj['selectedNode']; that.selectedNodeTypeStr = selectedObj['nodeType']; that.selectedNodeTypeEnum = NodeType[that.selectedNodeTypeStr]; } ... } |
底线是,我宁愿在HTML中使用这种类型的编码:
1 | *ngIf="selectedNode && selectedNodeTypeEnum===NodeType.HostService" |
而不是引用枚举int-vaue本身。
能做到吗?
谢谢和问候。
由于模板的表达式上下文是组件实例,因此应将
1 2 3 4 | export class ConfigNetworkTreeComponent { public nodeType = NodeType; ... } |
然后,您可以在模板中使用该属性来引用
1 | *ngIf="selectedNode && selectedNodeType === nodeType.HostService" |
看看这个StackBlitz的演示。
您可以创建一个方法来返回组件中枚举元素的字符串表示,例如:
1 2 3 | getActionName(): string { return Action[this.action]; } |
在HTML模板中称之为:
1 2 | <button type="submit" [disabled]="!userProfileForm.valid" class="btn btn-danger"> {{getActionName()}}</button> |
当声明的枚举类似于:
1 2 3 | export enum Action { update, create } |
在视图中使用枚举的最简单方法
1 2 3 4 5 6 7 8 9 10 11 | export enum NodeType { Location, Host } export class VersionDetailsComponent implements OnInit { NodeType: any = NodeType } {{NodeType.Location}} // 0 <span *ngIf="NodeType.Location == 0">Location</span> |