Angular2 - 如何将单选按钮绑定(bind)到 bool 对象属性

标签 angular

我有一个非常简单的模型,如下所示:

export class Answer {

  constructor(public text: string, public isCorrect: boolean = false) {
  }

}

我想将它绑定(bind)到单选按钮,如果单选按钮被选中,isCorrect 属性为 true,否则为 。解决这个问题的正确方法是什么?

明确地说,我会有一个 Answer 数组,每个 Answer 都有一个单选按钮。

Plnkr Example

到目前为止,我的模板如下所示:

<label *ngFor="let answer of answers">
  <input #rad type="radio" name="answer-{{questionIndex}}" [(ngModel)]="answer.isCorrect" [value]="rad.checked">
  {{answer.text}}
</label>

最佳答案

我遇到了类似的问题。这是一个设计问题。单选按钮旨在允许用户从列表中选择单个值,因此将它们分别绑定(bind)到一个单独的 bool 值与它们的意图不一致。

像您一样,我想使用单选按钮,因为它们具有“单值”特征,而无需执行大量额外的 javascript 工作来在提交表单时将它们的行为强加到我的数据结构上。最终,我解决了这个问题,使用 (change) 事件绑定(bind)在单击单选按钮时相应地更新我的数据结构。

模板:

<input *ngFor='let answer of answers; let a = index' type='radio' name='question.id' 
  (change)='handleRadio(a)>

组件:

handleRadio(answerIndex: number): void {
  this.answers.forEach((answer) => {
    answer.checked = false;
  });
  this.answers[answerIndex].checked = true;
}

请注意,如果您尝试从组件数据重新加载表单,这将会中断 - 在这种情况下,我需要更改我的内部数据结构以反射(reflect)单选按钮。

关于Angular2 - 如何将单选按钮绑定(bind)到 bool 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440645/

相关文章:

angular - NativeScript - 如何将图像保存/添加到手机的默认图库应用程序中

angular - 在 Angular 4 的 html 字段中设置值

javascript - 即使表单具有有效值,Angular 4 按钮也会被禁用

javascript - div 和 childs 上的 Angular 2 鼠标悬停事件

javascript - 在 webworker 中运行 Angular 5 应用程序会导致窗口对象未定义

html - Angular md-button 破坏对齐

node.js - Angular 无法在本地系统上安装 - npm ERR!代码 ERR_SOCKET_TIMEOUT

javascript - 如何在 Angular 2 beta 的服务中有效地使用 Http 组件?

angular - 无法从异步函数获取值

angular - 使用 Angular Material 和 flex css 的垫子菜单样式不能以 Angular 工作