使用ng-repeat,ng-model和复选框获取阵列中的位置

时间:2015-09-04 03:39:11

标签: javascript angularjs algorithm

我必须向用户提出一系列问题并记录他们的回答。问题和可能答案的类型/数量有很多种,所以我试图以捕获所有问题类型的方式编写我的代码。两个示例问题是:

您更喜欢什么尺寸的组织? 答案选项:1-10,11-50,51-200,201-500,501-1,000,1,001-5,000,5,001-10,000,10,000 +

您更喜欢哪种着装要求? 答案选择:休闲,商务休闲,正式

我需要向两个不同的用户提出相同的问题,并将他们的回答相互比较以确定%匹配。由于答案不同,我想匹配所选答案的数组中的位置。这样,我可以在视图中动态构建答案选项,并对所有问题使用相同的匹配算法。 user1 answerArray [1,3,5]和user2 ansswerArray [2,3,5]回答3个匹配,所以给出一个观点。或者,user1 answerArray [false,false,true,true,true]和user2 answerArray [true,true,true,false,false]他们都选择了答案3,所以给出一个观点。

我目前的方法是尝试使用ng-repeat为每个答案创建一个复选框,但我不确定如何确定选中哪个复选框。我尝试使用索引来获取重复循环中的位置,但它不起作用,我不知道如何处理将其传递到我的提交函数。

form.form-horizontal(ng-submit='answer(not sure what to do with params here)')
    div.form-group(ng-repeat='answer in questionData.answers')
        label.col-xs-3 {{answer}}:
            input(type='checkbox' ng-model='index' ng-change='checked(true, false)')

我已经阅读了关于组合ng-repeat和ng-model的其他一些答案,我可以使数组成为一个对象数组,然后将ng-model设置为一个对象属性。这似乎是不必要的数据转换。我很乐意听到其他解决方案。

页面如下所示:

<div ng-view="" class="ng-scope">
    <div class="ng-binding ng-scope">What size organization do you prefer?</div>
    <form ng-submit="answer(1,2,3,4,5,6,7,8)" class="form-horizontal ng-pristine ng-valid ng-scope"><!-- ngRepeat: answer in questionData.answers -->
        <div ng-repeat="answer in questionData.answers" class="form-group ng-scope">
            <label class="col-xs-3 ng-binding">1-10:
                <input type="checkbox" ng-model="$index" ng-change="checked(true, false)" class="ng-pristine ng-untouched ng-valid"></label>

2 个答案:

答案 0 :(得分:3)

您可以使用$ index访问循环中当前项的位置。因此,您可以将模型值指定为answerArray[$index],以便获得结果数组

input(type='checkbox' ng-model='answerArray[$index]' ng-change='checked(true, false)')

答案 1 :(得分:1)

{p> ng-repeat附带$index。例如:

 <li ng-repeat="page in pages">
            <a ng-class="{ testClass: $index == pageNumber }" ng-click="setPageNumber($index)">{{ page }}</a>
 </li>