当前位置: 首页 > 知识库问答 >
问题:

如何在Angular 5视图中访问枚举值

白子昂
2023-03-14

我目前在我的html视图中直接引用enumint值,但是我更喜欢引用enum名称-例如,就像我在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>

在我的组件中,我正在设置。SelectedNodeTypeNum:

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中使用这种风格的编码:

*ngIf="selectedNode && selectedNodeTypeEnum===NodeType.HostService"

而不是引用枚举值本身。

能做到吗?

谢谢和问候。

共有3个答案

康鹏云
2023-03-14

您可以创建一个方法,用于返回组件中枚举元素的字符串表示形式,如:

getActionName(): string {
    return Action[this.action];
  }

在html模板中,将其称为:

 <button type="submit" [disabled]="!userProfileForm.valid" class="btn btn-danger">
            {{getActionName()}}</button>

当您声明的枚举类似于:

    export enum Action {
  update, create
}
公孙弘深
2023-03-14

在HTML和intellisense中使用enum的最简单方法

你的枚举

export enum NodeType {
    Location,
    Host
}

您的组件类

export class YourComponent {

    get Node() {
       return NodeType
    }

}

你的组件是HTML

<div>{{Node.Location}}</div> // 0
<span *ngIf="Node.Location == 0">Location</span>
徐昊焜
2023-03-14

由于模板的表达式上下文是组件实例,因此应将节点类型枚举分配给组件类的属性,以使其在模板中可用:

export class ConfigNetworkTreeComponent {
  public NodeTypeEnum = NodeType;  // Note: use the = operator
  ...
}

然后,您可以在模板中使用该属性来引用NodeType值:

*ngIf="selectedNode && selectedNodeType === NodeTypeEnum.HostService"

请看这个stackblitz的演示。

 类似资料:
  • 枚举具有名为'hash value'的属性,该属性是枚举内的索引。

  • 问题内容: 通过阅读SCJP书籍,我在第1章“自测”中发现了类似的内容: 注意:代码编译正常。我不明白的是为什么我们可以从变量访问DOG,CAT或FISH常量。我认为(并且也写在书中)DOG,FISH,CAT是常量,其实现方式类似于。 所以,如果它们确实是静态的,为什么我们可以从中访问它们呢?最后一行是我熟悉的方式。 问题答案: 写作 和写作一样。也就是说,编译器将用其编译时类型Animal替换变

  • 问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种:

  • 问题内容: 我要做什么才能完成此任务?另外,可以说我将其更改为: 我该如何使它符合Decodable? EDit 这是我的完整代码(不起作用) 最终编辑 另外,它将如何处理这样的枚举? 问题答案: 这很简单,只需使用或隐式分配的原始值即可。 被编码到并到 要么 被编码到并到 这是一个简单的示例如何使用它:

  • 问题内容: 我无法使用从常量中获取的枚举作为注释中的参数。我收到此编译错误:“注释属性[attribute]的值必须是枚举常量表达式”。 这是枚举代码的简化版本: 对于注释: 和班级: 该错误仅在方法B的“ theEnum = MYENUM_CONSTANT”中显示。字符串和int常量对于编译器是可以的,但Enum常量不是,即使它的值与methodA上的值完全相同。在我看来,这是编译器中缺少的功能