【问题标题】:Accessing const enums in Angular html template在 Angular html 模板中访问 c​​onst 枚举
【发布时间】:2020-11-29 20:39:23
【问题描述】:

假设我有一个常量枚举:

export const enum MyConstEnum{
    Value1 = 'Value1',
    Value2 = 'Value2',
    Value3 = 'Value3'
}

现在我想在我的 Angular 模板中使用它:

<span *ngIf="name === MyConstEnum.Value1">This has some value</value>

但是,这是不可能的,因为模板看不到MyConstEnum。 那么问题来了,如何在Angular html模板中访问const enum

如果枚举不是这样的 const

export enum MyEnum{
    Value1 = 'Value1',
    Value2 = 'Value2',
    Value3 = 'Value3'
}

有一种解决方案可以在模板的组件中创建属性

  public get MyEnumInComponent() {
    return MyEnum;
  }

MyEnumInComponent 可以在 HTML 中访问。 但是,我有const enum

为此,我无法像上面那样定义属性。解决办法是什么(除了把const enum改成enum)?

【问题讨论】:

  • 你能详细说明这里的问题吗?我不明白什么不起作用以及你真正想要完成什么。
  • 我可以在此链接“github.com/angular/angular/issues/25963”上看到这是一个问题,需要修复。还有一些人建议解决问题,看看是否有帮助。
  • @TarangRathod 你能举个例子吗?它是“常量枚举”而不是“枚举”?
  • @PhilippMeissner 检查我的解决方案!

标签: html angular typescript templates enums


【解决方案1】:

我可以在这个链接上看到https://github.com/angular/angular/issues/25963 这是一个已知问题,特别是 const enum。

There is also a work arround suggested in the discussion on the url:
templateImports: [someConstant, UserStatus, isDevMode]
This would not work, but the below could:

templateImports: {someConstant, UserStatus, isDevMode}

【讨论】:

  • 什么是模板导入? Angular 文档中 templateImports 的定义在哪里?
  • 你自己试过了吗?这只是建议,并未实施
  • 我没试过我说我遇到了这个信息,如果它可能有帮助的话
【解决方案2】:

如果 TypeScript 不会删除发出的 JavaScript 代码中的 const 枚举声明,这将是可能的。

为此有专门的编译器选项preserveConstEnums

tsconfig.json

{
  "compilerOptions": {
    ...
    "preserveConstEnums": true,
    ...
  },
  ...
}

现在,假设你有

const-enum.ts

export const enum MyConstEnum {
    Value1 = 'Value1',
    Value2 = 'Value2',
    Value3 = 'Value3'
}

您可以将其导入到组件中,例如:

import * as constEnumModule from './const-enum';

class SomeComponent {
  MyConstEnum = (constEnumModule as any).MyConstEnum;
}

它最终应该可以在您的模板中用于该组件:

<span *ngIf="name === MyConstEnum.Value1">This has some value</value>

【讨论】:

  • 我不明白这一点,preserveConstEnums 用查找表替换 const 枚举,而不是内联枚举值,这是 const 枚举的主要目的,此时您宁愿使用非 const枚举而不是 const 枚举。 preserveConstEnums 主要用于调试目的。
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 2013-04-28
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2012-03-20
相关资源
最近更新 更多