首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只选中*ngFor循环中的一个复选框(单选按钮行为)

只选中*ngFor循环中的一个复选框(单选按钮行为)
EN

Stack Overflow用户
提问于 2016-06-17 00:38:25
回答 1查看 2.1K关注 0票数 1

我有一个在Angular2中开发的Quizz模块,所以仅仅是一些带有建议答案的问题,您只需要检查一个答案,我知道单选按钮可以处理这种情况,但我希望它是带有单选按钮行为的复选框,问题是我做了一部分工作,但是由于在*ngFor循环中它更复杂,一旦我检查了B-问题答案,A-问题检查的答案就会被不检查等等。以下是我的HTML:

代码语言:javascript
复制
<div *ngFor="#qt of listQuestion"><h3 class="uk-accordion-title" >{{qt.wordingQ}}</h3>

           <div class="uk-accordion-content">

    <input type="checkbox" class="cb"  id="0" [(ngModel)]="qt.chp[0]" onchange="cbChange(this)" />

    <label for="0" class="inline-label" > <b>{{qt.lpo[0]}}</b></label><br><br>

    <input type="checkbox" class="cb"   id="1" [(ngModel)]="qt.chp[1]" onchange="cbChange(this)" />

    <label for="1" class="inline-label"><b>{{qt.lpo[1]}}</b></label><br><br>

    <input type="checkbox" class="cb"   id="2" [(ngModel)]="qt.chp[2]" onchange="cbChange(this)"/>

    <label for="2" class="inline-label"> <b>{{qt.lpo[2]}}</b></label><br><br>

    <input type="checkbox" class="cb"  id="3" [(ngModel)]="qt.chp[3]" onchange="cbChange(this)"/>

    <label for="3" class="inline-label"><b>{{qt.lpo[3]}}</b></label>

                               </div></div>

下面是制作单独检查方式的脚本:

代码语言:javascript
复制
<script>
  function cbChange(obj) {
    var cbs = document.getElementsByClassName("cb");
    for (var i = 0; i < cbs.length; i++) {
      cbs[i].checked = false;
    }
    obj.checked = true;
  }
</script>

正如您所看到的,加载问题列表是一个*ngFor循环;每个问题都有一个命题列表(lpo[i]),而[(ngModel)]="qt.chp[i]"用于获取每个命题的状态(选中的命题),我想我必须将每个onchange函数引用到每个唯一的ngModel (就像索引中的那样),但我不知道怎么做。有什么帮助吗?(这是真实的情况)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-17 01:24:43

在您的情况下,因为每个问题只能选择一个答案,所以我建议您不要在回答级别中使用布尔字段来表示选择。相反,您应该将所选的答案存储在问题级别上。就像这样:

代码语言:javascript
复制
class Question {
    wording: string;
    answers: string[];

    selectedAnswer: string;

    selectAnswer(ans: string) {
        this.selectedAnswer = ans;
    }
}

将来,您可以很容易地更改selectedAnswer属性和selectAnswer函数实现,以便在需要时满足多个选择。然后,需要对问题模板进行稍微修改,以适应更改:

代码语言:javascript
复制
<div *ngFor="let question of questions">
  <p>{{question.wording}}</p>
  <div *ngFor="let answer of question.answers; let aIndex = index">
    <input type="checkbox" class="cb" id="{{aIndex}}" [ngModel]="answer === question.selectedAnswer" (ngModelChange)="question.selectAnswer(answer)" />
    <label for="{{aIndex}}" class="inline-label" > <b>{{answer}}</b></label><br><br>
  </div>
</div>

下面是可运行的柱塞:http://plnkr.co/edit/xMTtFp31rU2ZqCtV8JO1?p=preview

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37871421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档