数组的打字稿枚举

时间:2018-07-05 18:50:22

标签: angular typescript enums

当前,我正在从后端获取一组UserRole对象。每个UserRole都有一个ID(int)和一个Role(string)。

UserRoles []看起来像...
[
   //{id, role}
     {1, Viewer},
     {2, Owner},
     {3, Admin}
]
_models \ userRole.ts
export interface UserRole {
    id: number,
    role: string
}


home.component.ts
export class HomeComponent implements OnInit {
    ...
    userRoles: UserRole[]

    constructor(...) {
        http.get<UserRole[]>(baseurl + "api/UserRoles/GetUserRoles").subscribe(result => { 
            this.userRoles = result; 
            }, error => console.error(error));
    }

    ...
}


问题:

我想将其变成一个枚举,用于限制提供给用户的内容。例如,

<div *ngIf="user.userRoleId >= userRoles.Owner ">

我应该从后端(这是一个ASP.NET Core控制器)发送除对象数组之外的其他内容吗?

是否可以通过api调用立即生成枚举?

还是有一种方法可以将对象数组转换为枚举?

1 个答案:

答案 0 :(得分:0)

由于Eliseo的建议,这就是我最终要做的事情:

我将UserRoles检索为数组,然后对该数组进行了foreach循环,并将角色和ID添加到对象。

home.component.ts
//imports

export class HomeComponent implements OnInit {
    ...
    user: User;
    userRoles: any = {};

    constructor(private userRoleService: UserRoleService, private alertify: AlertifyService) {}

    ngOnInit() {
        this.loadUserRoles();
    }

    loadUserRoles() {
        this.userRoleService.getUserRoles().subscribe((res: UserRole[]) => {
            res.forEach(p => this.userRoles[p.role] = p.id);
        });
    }
userRole.service.ts
//imports

@Injectable()
export class UserRoleService {
    baseUrl = environment.apiUrl;

    constructor(private authHttp: HttpClient) {}

    getUserRoles(): Observable<UserRole[]> {
        return this.authHttp
            .get<UserRole[]>(this.baseUrl + "UserRoles");
    }
}
home.component.html 实施
<div *ngIf="user.userRoleId >= userRoles.Owner ">
    ...
</div>