如何在AngularJS中过滤对象集合

如何在AngularJS中过滤对象集合,angularjs,Angularjs,我有一个问题模型,结构如下: { "id": 5, "description": "Does your site have Facebook?", "question_category_id": 3 } { "id": 1, "name": "Network", "description": "Network" } 还有问题类别结构: { "id": 5, "description": "Does your site

我有一个问题模型,结构如下:

 {
    "id": 5,
    "description": "Does your site have Facebook?",
    "question_category_id": 3
  }
{
    "id": 1,
    "name": "Network",
    "description": "Network"
  }
还有问题类别结构:

 {
    "id": 5,
    "description": "Does your site have Facebook?",
    "question_category_id": 3
  }
{
    "id": 1,
    "name": "Network",
    "description": "Network"
  }
现在我可以用AngularJs从服务器端获取全部问题列表

但我只想在第1节中显示属于类别1(id=1)的问题,在第2节中显示属于类别2(id=2)的问题

我喜欢这样的景色:

<table class="table table-striped table-bordered table-hover" id="dataTables-example" ng-controller="testControl">

        <div ng-repeat="qc in questionsCategories">
            <thead>
                <tr>
                    <th colspan="3" class="bg-success">{{qc.name}}</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="q in questions | filter:{question_category_id : qc.id}">
                    <td class="text-center">{{q.id}}</td>
                    <td>
                        <span>{{q.description}}</span>
                        <a href="#" data-toggle="popover" title="" data-content="{{q.tip}}">
                            <i class="fa fa-info-circle fa-1x text-primary"></i>
                        </a>
                    </td>
                    <td>
                        <label class="radio-inline">
                            <input type="radio" name="optionsRadiosInline" id="optionsRadiosInline1" value="option1">Yes
                        </label>
                        <label class="radio-inline">
                            <input type="radio" name="optionsRadiosInline" id="optionsRadiosInline2" value="option2">No
                        </label>
                    </td>
                </tr>
            </tbody>
        </div>

    </table>
  • 网络
  • 你有Facebook吗
  • 你有推特吗
  • 大学
  • 你的最高学位是什么
  • 等等
  • 我试图编写一个过滤器:

           <ul class="questionsClass">
              <li ng-repeat="q in questions | filter:question_category_id = 1">
                {{q.description}}
    
              </li>
            </ul>
    
    此筛选器执行“从“不等于”开始”操作,这会导致在类别1部分中显示不属于类别1,但属于类别10的问题

    我还尝试:

    filter: q.question_category_id == qc.id : true
    
    然后只显示类别,问题消失


    现在我不知道下一步该做什么…

    所以,如果我理解正确,您有以下结构的数据

    // Categories
    $scope.categories = [{
      "id": 1,
      "name": "Network",
      "description": "Network"
    },{
      "id": 2,
      "name": "University",
      "description": "University"
    }];
    
    // Questions
    $scope.questions = [{
      "id": 1,
      "description": "Does your site have Facebook?",
      "question_category_id": 1
    },{
      "id": 2,
      "description": "Does your site have Twitter?",
      "question_category_id": 1
    },{
      "id": 3,
      "description": "Did you go to University?",
      "question_category_id": 2
    }]
    
    然后您的HTML模板可能看起来像

    <table ng-repeat="c in categories">
      <thead>
        <tr>
          <th>{{ c.id }}. {{ c.description }}</th>
        </tr>
      </thead>
      <tbody ng-repeat="q in questions | filter: { question_category_id: c.id } : true">
        <tr>
          <td>{{q.description}}</td>
        </tr>
      </tbody>
    </table>
    
    
    {{c.id}}。{{c.description}}
    {{q.description}}
    


    这里的示例Plunker

    也许这为您指明了正确的方向,您可以始终创建一个自定义过滤器-它只是JS代码,您可以在
    |
    之后引用。您可以使用自定义过滤器,但对于这一点,它感觉有点过头了。您好@MikkoViitala thx很多朋友!!!哈哈,现在我可以只显示特定类别下的问题了。但是如何显示类别呢?我的同事(一名前端开发人员)将模拟all放在一个html表中,这使得我很难使用ng-repeat.hi@MikkoViitala Great~!它现在可以工作了~!非常感谢~!嗨,Mikko,我写的和你们的一模一样,希望我能用这个表。我可以显示问题,但类别不会显示…请查看我的更新伙伴。thxHi Mikko,你能试着用table做同样的演示吗?我必须使用table,因为前端开发人员就是这样做的,而jquerypulgin使用这个表,所以我不能真正地将它转换成div。感谢Mikko,但这使得多个表而不是一个表包含多行。我们能做得更好吗?你必须去掉thead/tbody,这样ng repeat就可以在一个DOM元素上迭代,比如:hi@MikkoViltala,是否可以将每个类别下显示的问题数量限制为1个?