Angular2-如何在* ngIf中使用字符串枚举

Dan*_*nny 2 enums typescript angular angular7

在Angular中enum使用时如何传递给函数*ngIf

我有以下代码:

export enum RoleType {
    User='User',
    Admin='Admin'
}
Run Code Online (Sandbox Code Playgroud)

组件功能

public hasAccess(role: RoleType) {
   //check role type and return true or false
}
Run Code Online (Sandbox Code Playgroud)

组件html

<div id="adminDiv" *ngIf="hasAccess('Admin')">
</div>
Run Code Online (Sandbox Code Playgroud)

当我构建它时,它一直在抱怨。它不能将字符串转换为枚举,是否有办法解决?

Dej*_*ach 11

这是一种更简洁的方法。在您的 component.ts 中执行以下操作

allRoleTypes = RoleType;
Run Code Online (Sandbox Code Playgroud)

并在您的 html 中

*ngIf="role===allRoleTypes.User"
Run Code Online (Sandbox Code Playgroud)

您不需要编写任何方法。


Sil*_*ind 8

正如@Buczkowski建议的那样,您可以这样做:

export enum RoleType {
    User = 'User',
    Admin = 'Admin'
}
Run Code Online (Sandbox Code Playgroud)

零件

RoleType = RoleType; // This way you can access its properties from the template.

public hasAccess(role: RoleType) {
    //check role type and return true or false
}
Run Code Online (Sandbox Code Playgroud)

组件html

<div id="adminDiv" *ngIf="hasAccess(RoleType.Admin)">
</div>
Run Code Online (Sandbox Code Playgroud)

StackBlitz示例


Hyp*_*ate 3

将其作为字符串获取,然后将其转换为 RoleType。

public hasAccess(role: string): boolean {
const roleAsEnum: RoleType = RoleType[role];

return ...
}
Run Code Online (Sandbox Code Playgroud)