Angular 4 枚举未在列表中更新

Angular 4 Enum doesn't update in list

我从 API 加载的列表 (*ngFor) 中有一个字段 (item.state),在方法中处理并以这种方式显示在屏幕上:

<div class="posts col-md-12" *ngFor="let item of objectives.results" (click)="openItem(modalObjective, item)">
        <div class="row">
            <h4 class="col-md-11">{{item.title}}</h4>
        </div>
        <div class="row">
            <span class="col-md-2">{{item.description}}</span>
            <span class="col-md-3">{{item.ownerPersonName}}</span>
            <span class="col-md-3">{{setStateEnum(item.state)}}</span>
            <div class="progress col-md-4">
                <span class="col-md-2">{{item.state}}%</span>
                <div class="progress-bar" role="progressbar" aria-valuenow="70" aria-valuemin="0" aria-valuemax="100" style="width:70%">
                    <span class="sr-only">70% Complete</span>
                </div>
            </div>
        </div>
    </div>

单击某个项目时,我会显示一个包含该项目详细信息的模式。在此模式中,我可以通过 "select html component" 更改此项的 "state"。没关系,但是,当我更改状态并关闭模式时,该项目的状态已更新,但这次是一个数字。 属性 没有再次进入方法 "setStateEnum",这只是显示从 API 返回的值(整数)。每次更新状态时,如何将 属性 再次传递给 "setStateEnum" 方法以显示字符串值?

TS 中的 setStateEnum 方法:

rivate setStateEnum(state: any) {
    switch (state) {
        case 0:
            return "Waiting";
        case 1:
            return "Running";
        case 2:
            return "Finished";
        case 3:
            return "Approved";
        default:
            return state;
    }
}

谢谢!

更新

我只需要向我的 switch case 添加一个 parseInt 就可以了!!就像masterfloda说的。问题是:属性 正在通过方法 "setStateEnum" 并转到 "default",因为该方法正在接收来自更新的字符串!

像这样:

private setStateEnum(state: any) {
    switch (parseInt(state)) {
        case 0:
            return "Waiting";
        case 1:
            return "Running";
        case 2:
            return "Finished";
        case 3:
            return "Approved";
        default:
            return state;
    }
}

我的猜测是,在您更改 state 之后,它是一个字符串,而不是整数,这就是切换到 default: 的原因。而且您不会收到错误,因为该方法接受 any 参数类型。

尝试检查 switch(parseInt(state)):

尽管更简洁的方法是将整数传递给方法并将参数声明更改为 state: number,因为这样您将收到有关格式错误的输入参数的通知。