【问题标题】:check if items inside ng-repeat already contains value检查 ng-repeat 中的项目是否已经包含值
【发布时间】:2016-08-19 10:17:37
【问题描述】:

我有 JSON 问题和答案字符串,绑定在 ng-repeat 中, 现在的问题是我想在 ng-repeat 中显示问题一次和所有多个答案。 这是我的数据。

{Answer:"White",AnswerID:967,answer_type:"RADIO",fullquestion:"Your Race",id:6}{Answer:"African American",AnswerID:968,answer_type:"RADIO",fullquestion:"Your Race",id:6}{Answer:"Asian",AnswerID:969,answer_type:"RADIO",fullquestion:"Your Race",id:6}

查看我正在显示的

 <div ng-repeat="hrq in HrqQuestions">
            <div class="list card normal">
                <div class="item item-body item-divider">                    
                    <p ng-bind="hrq.fullquestion"></p>                       
                </div>
                <label class="item item-input" ng-show="hrq.answer_type=='FREETEXT'">
                    <input ng-model="hrq.Answer" name="name" type="text">
                </label>
                <div ng-if="hrq.answer_type=='RADIO'">
                    <ion-radio ng-click="selectedAnswer(hrq.AnswerID,hrq.Answer)" name="radio1" ng-value="hrq.AnswerID">{{hrq.Answer}}</ion-radio>
                </div>
            </div>
        </div>

但这会将所有问题多次与答案绑定

     Q.Your Race
           White Your Race
     Q.Your Race
           African American Your Race
     Q.Your Race
           Asian

但我需要喜欢

     Q. Your Race
           White Your Race
           African American Your Race
           Asian

如果有人能帮我解决这个问题,我将非常感激

【问题讨论】:

  • 一个想法是将 HrqQuestions 对象转换为您想要的格式。

标签: javascript angularjs angularjs-ng-repeat angular-ng-if


【解决方案1】:

试试这个,

  1. 将您的 'HrqQuestions' 更改为数组
  2. 使用 'id' 对您的问题进行分组
  3. 然后重复分组问题的。像这样,

angular.module('app',['angular.filter']).controller('MainController', function($scope) {
  $scope.HrqQuestions = [
      {Answer:"White",AnswerID:967,answer_type:"RADIO",fullquestion:"Your Race",id:6},
      {Answer:"African American",AnswerID:968,answer_type:"RADIO",fullquestion:"Your Race",id:6},
      {Answer:"Asian",AnswerID:969,answer_type:"RADIO",fullquestion:"Your Race",id:6}
    ];
 });
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.4/angular-filter.js"></script>

<body ng-controller="MainController">
  <div ng-repeat="(key, value) in HrqQuestions | groupBy: 'id'">
    <div><strong>Id:</strong> {{ key }}</div>
     <p ng-repeat="v in value">
       <strong>Answer {{ $index + 1}}</strong>. {{ v.Answer }}
     </p>
  </div>
</body>
</html>

【讨论】:

  • 太棒了,非常感谢你,这是我正在寻找的 :)
【解决方案2】:

试试this fiddle

    <div ng-controller="MyCtrl">      
  <div ng-repeat="hrq in HrqQuestions">
            <div class="list card normal">
                <div class="item item-body item-divider">                    
                  <p>{{$index + 1}}. {{hrq.fullquestion}}</p>              
                </div>
                <div ng-repeat="answer in hrq.answers">
                  <label class="item item-input" ng-show="answer.answer_type=='FREETEXT'">
                    <input ng-model="answer.Answer" name="name" type="text">
                </label>
                <div ng-if="answer.answer_type=='RADIO'">
                    <input type="radio" ng-click="selectedAnswer(answer.AnswerID,answer.Answer)" name="radio1" ng-value="answer.AnswerID">{{answer.Answer}} 
                </div>
                </div>
                <br>
            </div>
        </div>
</div>

控制器代码

    $scope.HrqQuestions = [{ fullquestion: "Your Race", id: 6,
                         answers: [{ Answer: "White", AnswerID: 967, answer_type: "RADIO" },
                                   { Answer: "African American", AnswerID: 968, answer_type: "RADIO" },
                                   { Answer: "Asian", AnswerID: 969, answer_type: "RADIO" }] }, 
                        { fullquestion: "My Race", id: 7, 
                          answers: [{ Answer: "Black", AnswerID: 967, answer_type: "RADIO" },
                                    { Answer: "African Indian", AnswerID: 968, answer_type: "RADIO" },
                                    { Answer: "India", AnswerID: 969, answer_type: "RADIO" }] }];

【讨论】:

  • JSON 字符串中有多个问题,所以我必须在 ng-repeat 中使用它来显示所有问题,我无法单独显示它们。
  • 我已经更新了答案,您需要更改 JSON 结构,将问题和答案保存在一个对象中。查看更新的答案和小提琴
  • 感谢您的回复。 tbh,我正在寻找通过提供一些过滤器或 where 条件在 ng-repeat 中进行更改的内容,我的首要任务是更改 JSON 格式,但我必须编写太多代码才能更改 JSON。
  • 您可以在angularJS中轻松更改JSON格式,无需更改后端。
  • 从我的 json 格式更改为您提供的 json 格式,您不认为它需要很多循环吗?在我的情况下,我从来没有在 angular js 中做过,所以不知道它会有多容易在 Angular js 中,如果您可以分享任何示例,那将是很大的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多