我目前正在enum
视图中直接引用html
int值,但我更愿意通过枚举名称引用 - 例如,就像我在TypeScript代码中那样
if (this.nodeType === NodeType.HostService) {
...
}
我将枚举定义为:
export enum NodeType {
Location,
Host,
HostAccessPoint,
HostStorage,
HostService
}

在我的html视图中,我在一个模态中加载特定组件(包括反应形式),如下所示 - 这一切都取决于enum
值:
<div class="modal-body">
<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>
</div>
&#13;
在我的组件中,我设置 that.selectedNodeTypeEnum :
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];
}
...
}
&#13;
底线是我宁愿在html中使用这种编码方式:
*ngIf="selectedNode && selectedNodeTypeEnum===NodeType.HostService"
而不是引用enum int vaue本身。
可以吗?
感谢和问候。
答案 0 :(得分:4)
由于模板的expression context是组件实例,因此您应该将NodeType
枚举分配给组件类的属性,以使其在模板中可用:
export class ConfigNetworkTreeComponent {
public nodeType = NodeType;
...
}
然后,您可以在模板中使用该属性来引用NodeType
值:
*ngIf="selectedNode && selectedNodeType === nodeType.HostService"
请参阅this stackblitz了解演示。
答案 1 :(得分:1)
您可以创建一种用于返回组件中枚举元素的字符串表示形式的方法,例如:
getActionName(): string {
return Action[this.action];
}
在html模板中将其命名为:
<button type="submit" [disabled]="!userProfileForm.valid" class="btn btn-danger">
{{getActionName()}}</button>
当您声明的枚举类似:
export enum Action {
update, create
}
答案 2 :(得分:0)
在视图中使用枚举的最简单方法
export enum NodeType {
Location,
Host
}
export class VersionDetailsComponent implements OnInit {
NodeType: any = NodeType
}
<div>{{NodeType.Location}}</div> // 0
<span *ngIf="NodeType.Location == 0">Location</span>