如何在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>
<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个?