return Object.keys(value)
    .map(x=>Number(x))
    .filter(x=>!isNaN(x));
情況是我有一個API會取得活動資料 ActivityDto
activity: ActivityDto = new ActivityDto();
ngOnInit(): void {
    this._activityService.get(this._id).subscribe(result => {
        this.activity = result;
    });
}
活動資料 ActivityDto
(活動資料內包含一個Enum型態的活動種類)
export interface IActivityDto {
    activityType: ActivityTypeEnum | undefined;
}
活動種類(Enum)
export enum ActivityTypeEnum {
    FirstActivity = 1, 
    SecondActivity = 2, 
}
我想建立編輯頁面時遇到幾個問題
1.如何顯示下拉式選單中的顯示部分
<mat-option *ngFor="let activityType of activity.activityType 
[value]=activityType>
{{activityType}}
</mat-option>
目標:Value 要是 1,2
而Text內文 {{}} 要顯示 FirstActivity,SecondActivity
let of 不支援 enum 所以上面其實跑不了
我目前是用管線去處理先轉成Array
export class EnumToArrayPipe implements PipeTransform {
  transform(value: any, args?: any): any {
      if(!value)
          return value;
      return Object.keys(value).filter(k => !isNaN(Number(k)));
  }
}
以上會取得 string[]{'1','2'}
然後再用管線去顯示資料
switch (value) {
    case '1':
      return "FirstActivity";
    case '2':
      return "SecondActivity";
}
2.如何繫結資料
<mat-select
name="ActivityType"
[(ngModel)]="activity.activityType"
enum資料好像無法直接繫結到我轉好的string[]{'1','2'}
所以目前我接完資料先轉成字串才能初始化selected
activityTypeSelected:string;
this.activityTypeSelected = this.activity.activityType.toString();
HTML改用
<mat-select
name="ActivityType"
[(ngModel)]="activityTypeSelected"
最後回存的時候再把string轉回int回存enumthis.activity.activityType = Number(this.activityTypeSelected);
有比較好的做法建議嗎?