Typescript枚举似乎与Angular2的ngSwitch指令自然匹配.但是当我尝试在我的组件模板中使用枚举时,我得到"无法读取未定义的属性'xxx'......".如何在组件模板中使用枚举值?
请注意,这与基于枚举(ngFor)的所有值创建html选择选项的方法不同.这个问题是关于ngSwitch基于枚举的特定值.虽然出现了创建枚举类的内部引用的相同方法.
我们可以在angular2视图模板中使用枚举吗?
<div class="Dropdown" dropdownType="instrument"></div>
Run Code Online (Sandbox Code Playgroud)
传递字符串作为输入:
enum DropdownType {
instrument,
account,
currency
}
@Component({
selector: '[.Dropdown]',
})
export class Dropdown {
@Input() public set dropdownType(value: any) {
console.log(value);
};
}
Run Code Online (Sandbox Code Playgroud)
但是如何传递枚举配置?我在模板中想要这样的东西:
<div class="Dropdown" dropdownType="DropdownType.instrument"></div>
Run Code Online (Sandbox Code Playgroud)
什么是最佳做法?
编辑:创建一个例子:
import {bootstrap} from 'angular2/platform/browser';
import {Component, View, Input} from 'angular2/core';
export enum DropdownType {
instrument = 0,
account = 1,
currency = 2
}
@Component({selector: '[.Dropdown]',})
@View({template: ''})
export class Dropdown {
public dropdownTypes = DropdownType;
@Input() public set dropdownType(value: any) {console.log(`-- dropdownType: ${value}`);};
constructor() …Run Code Online (Sandbox Code Playgroud) 我有一个枚举,
并希望从模板传递枚举值。这怎么可能?
export enum FIELDS {
GENDER = <any>'Gender',
SALUTATION = <any>'Salutation',
FIRSTNAME = <any>'First Name',
LASTNAME = <any>'Last Name',
EMAIL_ADDRESS = <any>'Email Address',
COUNTRY = <any>'Country',
}
Run Code Online (Sandbox Code Playgroud)
我的模板。在这里我想传递枚举值
[ngClass]="{'error':validate(FIELDS.COUNTRY)}"
Run Code Online (Sandbox Code Playgroud)
//这将引发错误:无法获取未定义或空引用的属性COUNTRY。
我的组件:
@Component({
selector: 'row-general',
template: require('./modify-invalid-row-general.component.html'),
styleUrls: ['./app/nedit/modify-invalid-row/modify-invalid-row.component.css']
})
export class ModifyInvalidRowGeneralComponent {
@Input() row: UploadRow;
@Input() columns: ConfigColumn[];
@Output() validateRow = new EventEmitter<UploadRow>();
public validate(field: string): boolean {
let invalidFields: string[] = [];
if (this.row.invalidFields != null)
invalidFields = this.row.invalidFields.split(';');
for (let i = 0; i < invalidFields.length; …Run Code Online (Sandbox Code Playgroud)