无法在HTML中处理Typescript枚举

Kly*_*ner 47 html enums typescript angular

我使用Typescript创建了一个枚举,用于MyService.service.ts MyComponent.component.ts和MyComponent.component.html.

export enum ConnectionResult {
    Success,
    Failed     
}
Run Code Online (Sandbox Code Playgroud)

我可以轻松地从MyService.service.ts获取并比较定义的枚举变量:

this.result = this.myService.getConnectionResult();

switch(this.result)  
{
    case ConnectionResult.Failed:
         doSomething();
         break;
    case ConnectionResult.Success:
         doSomething();
         break;
}
Run Code Online (Sandbox Code Playgroud)

我还想使用枚举在我的HTML中使用*ngIf语句进行比较:

<div *ngIf="result == ConnectionResult.Success; else failed">
            <img src="../../assets/connection-success.png" height="300px" class="image-sign-style" />
</div>
<ng-template #failed>
       <img src="../../assets/connection-failed.png" height="300px" class="image-sign-style" />
</ng-template>
Run Code Online (Sandbox Code Playgroud)

代码编译但浏览器给我一个错误:

无法读取未定义的属性

在此输入图像描述

使用以下html指示错误行:

在此输入图像描述

有谁知道为什么不能像这样接近枚举?

Gün*_*uer 88

模板的范围仅限于组件实例成员.如果你想参考那里需要的东西

class MyComponent {
  get connectionResult() { return ConnectionResult; }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

*ngIf="connectionResult.Success"
Run Code Online (Sandbox Code Playgroud)

另请参阅Angular2从HTML模板访问全局变量

  • 这里没有出现此错误吗?`错误 TS2475:'const' 枚举只能用于属性或索引访问表达式或导入声明或导出赋值或类型查询的右侧。` (5认同)
  • 不像[其他答案](/sf/answers/3932744441/)那样,您可以保留名称。(虽然可能会产生其他问题,但我还没有发现) (2认同)

Nik*_*ure 23

您将必须按照以下方式在.ts文件中写入它。

enum Tenure { day, week, all }

export class AppComponent {
    tenure = Tenure.day
    TenureType = Tenure
}
Run Code Online (Sandbox Code Playgroud)

现在在html中,您可以像这样使用

*ngIf = "tenure == TenureType.day ? selectedStyle : unSelectedStyle"
Run Code Online (Sandbox Code Playgroud)

我希望现在更加清楚。:)

  • 不要忘记在 TenureType 和 Tenure 之间使用“=”而不是“:”,即分配类型而不是定义它。我只是犯了这个错误,忽略了@Nikhil 所写的内容。+1 (3认同)

Ond*_*rka 12

您可以将枚举作为属性添加到组件中,在模板中使用与枚举相同的名称(四分之一):

enum Quarters{ Q1, Q2, Q3, Q4}

export class AppComponent {
   quarter = Quarters.Q1
   Quarters = Quarters
}
Run Code Online (Sandbox Code Playgroud)

在您的模板中

<div *ngIf="quarter == Quarters.Q1">I=am only visible for Q1</div> 
Run Code Online (Sandbox Code Playgroud)

之所以起作用,是因为新功能基本上是这种类型的:

TileType: typeof TileType
Run Code Online (Sandbox Code Playgroud)

  • 这个选项比其他选项好得多... (2认同)

小智 6

import MyEnum from enums;  
Run Code Online (Sandbox Code Playgroud)

.... 声明 var ....

public myEnum = MyEnum;
Run Code Online (Sandbox Code Playgroud)

并在 html 中使用:

<div *ngIf="xxx === myEnum.DATA"> ... </div>
Run Code Online (Sandbox Code Playgroud)


Dim*_*tha 6

为您服务

export enum ConnectionResult {
    Success,
    Failed     
}
Run Code Online (Sandbox Code Playgroud)

将枚举分配给 TypeScript 文件中的变量

ConnectionResult = ConnectionResult; 
Run Code Online (Sandbox Code Playgroud)

然后从 HTML 中读取 Enum,如下所示

*ngIf="result == ConnectionResult.Success"
Run Code Online (Sandbox Code Playgroud)