html - Typescript Enum 组合键值问题

标签 html angular typescript

我想在下拉列表中实现enum,但我在列表中同时获得了键和值。

我的枚举:

export enum VMRole {
    "Kubemaster" = 0, "Kubeworker" = 1, "Other" = 2
}

我的类(class)我试图将enum分配给我的属性:

export class VirtualMachine {   
    role: VMRole;
    ...
}

我的组件:

export class AddVmComponent implements OnInit {
  model: any = {};
  @ViewChild('addVMForm', { static: false }) formValues;  


  constructor(private alertify: AlertifyService, private vm: VmService, private route: 
       ActivatedRoute, private http: HttpClient) { 
    this.model.role = Object.keys(VMRole).filter(p => typeof p !== 'number')
  }
}

我的 HTML:

<select [ngModel]="model.role" class="form-control">     
   <option disabled>-Please choose role-</option>       
   <option *ngFor="let data of model.role | keyvalue"> 
            {{data.value}} 
   </option> 
</select>

屏幕截图:

enter image description here

最佳答案

当您尝试使用 p => typeof p !== 'number'enum 中过滤掉数字时,就会出现此问题。刚刚测试了它返回的值,就像下面的数组一样 - 正如您所看到的,该数组仅包含 string 值:

values

所以这个解决方案看起来很棘手,但它适合你:

Object.keys(VMRole).filter(p => !Number.isInteger(parseInt(p)))

或者更简单的解决方案,也适用于 TypeScript:

Object.keys(VMRole).filter(p => isNaN(p as any))

请在此处进一步阅读:

  1. Number.isInteger()
  2. parseInt()
  3. isNaN()

希望对您有所帮助!

关于html - Typescript Enum 组合键值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161040/

相关文章:

javascript - 如何使用 JavaScript 提交表单后启用按钮

angular - 为 Angular 项目启用 Docker 支持

angular - Ionic、Angular - ChangeDetectorRef 未定义

angular - 如何从Angular项目中删除Bootstrap?

javascript - 如何从子数组中选择特定的一个

jquery - 放置 Nivo-Slider 加载屏幕

javascript - 是否可以将全尺寸图像从网站拖放到资源管理器中,其中仅显示缩略图

javascript - Leaflet customcontrol - Angular 2+

angular - 如何取消 ngxs 调度操作

php - 如何将内部标签定位在不同的位置?