我有这个枚举(我使用的是TypeScript):
export enum CountryCodeEnum {
France = 1,
Belgium = 2
}
我想在我的表单中构建一个select,每个选项的值为enum整数值,标签为enum文本,如下所示:
<select>
<option value="1">France</option>
<option value="2">Belgium</option>
</select>
我该怎么做?
对于Angular2 v2,这里有一个非常简单的方法。0.0. 为了完整起见,我提供了一个示例,通过反应式表单设置country
select的默认值。
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<select id="country" formControlName="country">
<option *ngFor="let key of keys" [value]="key">{{countries[key]}}</option>
</select>
</div>
`,
directives: []
})
export class App {
keys: any[];
countries = CountryCodeEnum;
constructor(private fb: FormBuilder) {
this.keys = Object.keys(this.countries).filter(Number);
this.country = CountryCodeEnum.Belgium; //Default the value
}
}
update2通过创建数组简化
@Pipe({name: 'enumToArray'})
export class EnumToArrayPipe implements PipeTransform {
transform(value) : Object {
return Object.keys(value).filter(e => !isNaN(+e)).map(o => { return {index: +o, name: value[o]}});
}
}
@Component({
...
imports: [EnumsToArrayPipe],
template: `<div *ngFor="let item of roles | enumToArray">{{item.index}}: {{item.name}}</div>`
})
class MyComponent {
roles = Role;
}
使现代化
而不是管道:[KeysPipe]
使用
@NgModule({
declarations: [KeysPipe],
exports: [KeysPipe],
}
export class SharedModule{}
@NgModule({
...
imports: [SharedModule],
})
起初的
使用https://stackoverflow.com/a/35536052/217408的key
管道
我不得不对管道进行一些修改,以使其能够与enum正常工作(另请参见如何获取enum条目的名称?)
@Pipe({name: 'keys'})
export class KeysPipe implements PipeTransform {
transform(value, args:string[]) : any {
let keys = [];
for (var enumMember in value) {
if (!isNaN(parseInt(enumMember, 10))) {
keys.push({key: enumMember, value: value[enumMember]});
// Uncomment if you want log
// console.log("enum member: ", value[enumMember]);
}
}
return keys;
}
}
@Component({ ...
pipes: [KeysPipe],
template: `
<select>
<option *ngFor="let item of countries | keys" [value]="item.key">{{item.value}}</option>
</select>
`
})
class MyComponent {
countries = CountryCodeEnum;
}
普朗克
另请参见如何使用*ngFor迭代对象键?
如果您不想创建新管道,还有一个解决方案。您也可以将密钥提取到助手属性中并使用它:
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<select>
<option *ngFor="let key of keys" [value]="key" [label]="countries[key]"></option>
</select>
</div>
`,
directives: []
})
export class App {
countries = CountryCodeEnum
constructor() {
this.keys = Object.keys(this.countries).filter(k => !isNaN(Number(k)));
}
}
演示:http://plnkr.co/edit/CMFt6Zl7lLYgnHoKKa4E?p=preview
编辑:
如果您需要选项作为数字而不是字符串:
[value]
替换为[ngValue]
。地图(编号)
在之后。过滤器(…)
我正在尝试根据枚举值检索一个值。基本上,假设我有以下枚举: 通过执行auth.key.get()将返回“MyKey”,而auth.mail.get()将返回“MyMail”。我搜索了一下,但没有找到答案,我之前没有尝试过任何事情,因为我完全不知道如何开始。谢谢,祝你有个愉快的一天
我正在使用Jackson的ObjectMapper直接从收到的构建我的。为此,我用注释来注释我的字段(在本例中,字段是抽象方法,因为我使用AutoValue来简化样板文件)。 现在,我的POJO中的一些字段是,其中JSON显然包含一个常规字符串。我想以某种方式验证,在构建对象之前,这些JSON字段确实提交给给定的枚举类型。 下面是一个例子。 此属性的类型为,对应的JSON字段为ie.“Messag
使用上面的代码,我可以根据枚举值获取字段的值。现在如何设置字段的基于值例如:如果被选中,那么我需要设置到输入值。
假设我有一个班级: 我有另一个类,其中用户登录,并且根据他是管理员还是普通用户,用户可以访问有限的枚举列表。我知道我可以从类中获取所有枚举的完整列表,但是在枚举类不知道用户信息的情况下,通过某些标准过滤这些枚举的优雅方法是什么? 编辑:以下是它今天的样子: 我正在返回1000个事件的完整列表,而管理员应该只看到有限的数量。
问题内容: 我需要选择列的枚举值。通过搜索,我发现了两种方法: 和另一个: 尽管第一个查询将为我提供此信息: 第二个查询给了我相同的内容,并且还有其他列。我宁愿只获取那些没有“ enum()”和逗号的值,是否可能,还是我需要解析这些值?并不是仅检查是否有更简单的方法就很困难。 假设没有更简单的方法,那么上面两个查询中的哪个更适合使用?我注意到第二个查询在运行时没有显示查询时间,我几乎认为它根本不需
问题内容: 我正在阅读有关sqlalchemy的信息,并且看到了以下代码: 我应该在库中使用常量将“类型”设置为int吗?还是我应该使枚举成为枚举? 问题答案: SQLAlchemy从0.6开始具有Enum类型:http ://docs.sqlalchemy.org/en/latest/core/type_basics.html?highlight=enum#sqlalchemy.types.En