Со строковыми перечислениями вы можете попробовать это.
Мое строковое перечисление имеет следующее определение:
enum StatusEnum {
Published = <any> 'published',
Draft = <any> 'draft'
}
и переводится в js следующим образом:
{
Published: "published",
published: "Published",
Draft: "draft",
draft: "Draft"
}
У меня есть несколько из них в моем проекте, поэтому я создал небольшую вспомогательную функцию в общей служебной библиотеке:
@Injectable()
export class UtilsService {
stringEnumToKeyValue(stringEnum) {
const keyValue = [];
const keys = Object.keys(stringEnum).filter((value, index) => {
return !(index % 2);
});
for (const k of keys) {
keyValue.push({key: k, value: stringEnum[k]});
}
return keyValue;
}
}
Инициируйте в своем конструкторе компонентов и привяжите его к своему шаблону следующим образом:
В компоненте:
statusSelect;
constructor(private utils: UtilsService) {
this.statusSelect = this.utils.stringEnumToKeyValue(StatusEnum);
}
В шаблоне:
<option *ngFor="let status of statusSelect" [value]="status.value">
{{status.key}}
</option>
Не забудьте добавить UtilsService в массив провайдеров в вашем app.module.ts, чтобы вы могли легко внедрять его в разные компоненты.
Я новичок в машинописи, поэтому, пожалуйста, поправьте меня, если я ошибаюсь или есть лучшие решения.
person
Christopher
schedule
05.11.2017