Angular 2:如何从枚举创建单选按钮并添加双向绑定?
Angular 2: how to create radio buttons from enum and add two-way binding?
我正在尝试使用 Angular2 语法从枚举定义创建单选按钮,并将该值绑定到具有该枚举类型的 属性。
我的 html 包含:
<div class="from_elem">
<label>Motif</label><br>
<div *ngFor="let choice of motifChoices">
<input type="radio" name="motif" [(ngModel)]="choice.value"/>{{choice.motif}}<br>
</div>
</div>
在我的@Component 中,我声明了一组选项和值:
private motifChoices: any[] = [];
在我的@Component 的构造函数中,我按以下方式填写了选项:
constructor( private interService: InterventionService )
{
this.motifChoices =
Object.keys(MotifIntervention).filter( key => isNaN( Number( key )))
.map( key => { return { motif: key, value: false } });
}
单选按钮显示正确,现在我想将选择的值绑定到属性。但是当我单击其中一个按钮时,值 choice.value 被设置为未定义。
好的,我终于找到了解决方案。我目前正在使用 Angular 2 RC5。
我想绑定收音机的枚举值是 属性:
intervention.rapport.motifIntervention : MotifInterventions
在我的@Component 中,我声明了私有成员以允许访问 html 模板中的枚举定义:
export class InterventionDetails
{
private MotifIntervention = MotifIntervention;
private MotifInterventionValues = Object.values(MotifIntervention).filter( e => typeof( e ) == "number" );
// model object:
private intervention: Intervention;
这是单选按钮的 HTML 代码:
<div *ngFor="let choice of MotifInterventionValues">
<input type="radio"
[(ngModel)]="intervention.rapport.motifIntervention"
[checked]="intervention.rapport.motifIntervention==choice"
[value]="choice" />
{{MotifIntervention[choice]}}<br>
</div>
[(ngModel)]="intervention.rapport.motifIntervention"
是双向的
绑定,需要更新模型中的属性(在我的
案例 intervention.rapport.motifIntervention
)
[checked]="intervention.rapport.motifIntervention==choice"
是
如果值,则需要更新单选按钮组件
intervention.rapport.motifIntervention被外部修改。
[value]="choice"
是分配给我的 属性 的值
已选中单选按钮。
{{MotifIntervention[choice]}}
是单选按钮的标签
派对有点晚了,但这对我有用:
<tr *ngFor="let Item of Items; let idx = index" style="line-height: 10px;">
<td style="font-size:11px;padding-right: 10px;">{{ GetOption(Item) }}</td>
<td><input type="radio" [attr.name]="ComponentID" [id]="ComponentID"
[value]="GetValue(Item)" [checked]="value == GetValue(Item)" (change)="SelectionChange(GetValue(Item))"></td>
</tr>
其中:
- Items 是一个选项数组
- ComponentID 是组件的名称
- GetOption 是一个函数,returns 选项的标题
应该使用
- GetValue 是一个函数,returns
选项应该使用
- SelectionChanged 用于更新模型
请注意,我不使用 [(ngModel)]
我正在尝试使用 Angular2 语法从枚举定义创建单选按钮,并将该值绑定到具有该枚举类型的 属性。
我的 html 包含:
<div class="from_elem">
<label>Motif</label><br>
<div *ngFor="let choice of motifChoices">
<input type="radio" name="motif" [(ngModel)]="choice.value"/>{{choice.motif}}<br>
</div>
</div>
在我的@Component 中,我声明了一组选项和值:
private motifChoices: any[] = [];
在我的@Component 的构造函数中,我按以下方式填写了选项:
constructor( private interService: InterventionService )
{
this.motifChoices =
Object.keys(MotifIntervention).filter( key => isNaN( Number( key )))
.map( key => { return { motif: key, value: false } });
}
单选按钮显示正确,现在我想将选择的值绑定到属性。但是当我单击其中一个按钮时,值 choice.value 被设置为未定义。
好的,我终于找到了解决方案。我目前正在使用 Angular 2 RC5。
我想绑定收音机的枚举值是 属性:
intervention.rapport.motifIntervention : MotifInterventions
在我的@Component 中,我声明了私有成员以允许访问 html 模板中的枚举定义:
export class InterventionDetails
{
private MotifIntervention = MotifIntervention;
private MotifInterventionValues = Object.values(MotifIntervention).filter( e => typeof( e ) == "number" );
// model object:
private intervention: Intervention;
这是单选按钮的 HTML 代码:
<div *ngFor="let choice of MotifInterventionValues">
<input type="radio"
[(ngModel)]="intervention.rapport.motifIntervention"
[checked]="intervention.rapport.motifIntervention==choice"
[value]="choice" />
{{MotifIntervention[choice]}}<br>
</div>
[(ngModel)]="intervention.rapport.motifIntervention"
是双向的 绑定,需要更新模型中的属性(在我的 案例intervention.rapport.motifIntervention
)[checked]="intervention.rapport.motifIntervention==choice"
是 如果值,则需要更新单选按钮组件 intervention.rapport.motifIntervention被外部修改。[value]="choice"
是分配给我的 属性 的值 已选中单选按钮。{{MotifIntervention[choice]}}
是单选按钮的标签
派对有点晚了,但这对我有用:
<tr *ngFor="let Item of Items; let idx = index" style="line-height: 10px;">
<td style="font-size:11px;padding-right: 10px;">{{ GetOption(Item) }}</td>
<td><input type="radio" [attr.name]="ComponentID" [id]="ComponentID"
[value]="GetValue(Item)" [checked]="value == GetValue(Item)" (change)="SelectionChange(GetValue(Item))"></td>
</tr>
其中:
- Items 是一个选项数组
- ComponentID 是组件的名称
- GetOption 是一个函数,returns 选项的标题 应该使用
- GetValue 是一个函数,returns 选项应该使用
- SelectionChanged 用于更新模型
请注意,我不使用 [(ngModel)]