我用 Typescript 做了一个枚举,在 MyService.service.ts MyComponent.component.ts 和 MyComponent.component.html 中使用。
export enum ConnectionResult {
Success,
Failed
}
我可以轻松地从 MyService.service.ts 中获取和比较定义的枚举变量:
this.result = this.myService.getConnectionResult();
switch(this.result)
{
case ConnectionResult.Failed:
doSomething();
break;
case ConnectionResult.Success:
doSomething();
break;
}
我还想使用枚举在我的 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>
代码编译但浏览器给了我一个错误:
无法读取未定义的属性
https://i.stack.imgur.com/wYlMy.png
带有以下 html 指示错误行:
https://i.stack.imgur.com/ohEKw.png
有谁知道为什么不能像这样接近枚举?
模板的范围仅限于组件实例成员。如果你想引用它需要在那里可用的东西
class MyComponent {
public get connectionResult(): typeof ConnectionResult {
return ConnectionResult;
}
}
在 HTML 中,您现在可以使用
*ngIf="connectionResult.Success"
另请参阅Angular2 access global variables from HTML template
您必须按以下方式将其写入 .ts
文件。
enum Tenure { day, week, all }
export class AppComponent {
tenure = Tenure.day
TenureType = Tenure
}
现在在 html 中你可以像这样使用它
*ngIf = "tenure == TenureType.day ? selectedStyle : unSelectedStyle"
我希望现在更清楚了。 :)
您可以将枚举作为属性添加到组件中,并在模板中使用与枚举(Quarters)相同的名称:
enum Quarters{ Q1, Q2, Q3, Q4}
export class AppComponent {
quarter = Quarters.Q1
Quarters = Quarters //here you are creating a variable/alias to the enum
}
在您的模板中
<div *ngIf="quarter == Quarters.Q1">I=am only visible for Q1</div>
之所以可行,是因为新的属性基本上是这种类型:
TileType: typeof TileType
div
或 mat-icon
中,则必须引用枚举,而不是直接引用项目。显示比解释容易:<mat-icon svgIcon="{{Quarters[Quarters.Q1]}}"></mat-icon>
This condition will always return 'false' since the types <enum values> have no overlap.
?
import MyEnum from enums;
.... 声明 var ....
public myEnum = MyEnum;
并在 html 中使用:
<div *ngIf="xxx === myEnum.DATA"> ... </div>
如果枚举定义如下,您可以绑定为文本(这些值不会强制来自 API 的 json 字符串值)
export enum SomeEnum {
Failure = "Failure",
Success = "Success",
}
在 .ts 文件中
public status: SomeEnum;
在 .html 中
<div *ngIf="status == 'Success'">
在 Angular 8+ 中测试的另一种方法是使用带有数字的枚举
export enum SomeEnum {
Failure = 0,
Success = 1,
}
在 .ts 文件中
public status: SomeEnum;
在 .html 中
<div *ngIf="status == 1">
在您的服务中
export enum ConnectionResult {
Success,
Failed
}
将枚举分配给 TypeScript 文件中的变量
ConnectionResult = ConnectionResult;
然后从 HTML 中读取您的枚举,如下所示
*ngIf="result == ConnectionResult.Success"
error TS2475: 'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query.