基于IS AngularJS过滤结果
Filter result based on IS AngularJS
我有JSON文件中的数据。我正在显示类别列表,但我想过滤列表并仅显示具有'parent:0'的类别。
"categories": [
{
"id": 51,
"slug": "knarr",
"title": "Knarr",
"description": "",
"parent": 8,
"post_count": 2
},
{
"id": 15,
"slug": "service-vessels",
"title": "Service Vessels",
"description": "",
"parent": 0,
"post_count": 1
}
],
请检查我的代码在这里"http://plnkr.co/edit/1vcIAPSwvxQcbIzMhyzp?p =预览"
Angular的filter
提供程序已经具备了按属性过滤列表的能力(就像ng-repeat
那样)。在HTML中,这将像下面这样:
<ul ng-repeat="category in categories | filter:{parent: 0}">
------------------------------ HERE --^
演示:http://plnkr.co/edit/HXvkmar7I7HpgPbv6LVM?p=preview
不幸的是,使用的默认匹配是局部的。这意味着,如果parent
属性包含 "0"。因此,例如,任何具有parent: 10
的项也将匹配,如柱塞所示(对属性值进行字符串比较)。
幸运的是,您可以在过滤器表达式中提供true
,它将进行精确匹配。这意味着使用这个:
<ul ng-repeat="category in categories | filter:{parent: 0}:true">
-------------------------------------------------- HERE --^
演示:http://plnkr.co/edit/m22ML9XPf2FnZweuModU?p=preview
同样,作为一个建议,把ng-repeat
放在<ul>
元素上似乎很奇怪-我希望它在<li>
元素上。
查看其他答案中的评论,您也希望只显示唯一的类别。因为你的JSON意味着类别有唯一的id
s,你可以为你的应用创建一个自定义过滤器,像这样:
app.filter("uniqueCategoryFilter", function () {
return function (categories) {
var uniqueCategories, catIds;
uniqueCategories = [];
catIds = {};
if (categories) {
angular.forEach(categories, function (category) {
if (!catIds[category.id]) {
catIds[category.id] = true;
uniqueCategories.push(category);
}
});
}
return uniqueCategories;
};
});
并像这样使用:
<ul ng-repeat="category in categories | filter:{parent: 0}:true | uniqueCategoryFilter">
-------------------------------------------------------- HERE --^
演示:http://plnkr.co/edit/3NHuTvQiVHQTZxtIkEGB?p=preview
确保此唯一过滤器位于parent
属性过滤器之后。
引用:
- AngularJS API
filter
: https://docs.angularjs.org/api/ng/filter/filter
您可以筛选想要的类别:
$scope.categories = $scope.categories.filter(function(category) {
return category.parent === 0;
});
http://plnkr.co/edit/hHe2AS2gzm35mEqnHoQ3?p =预览
你可以在angular中创建自己的滤镜,你可以尝试这样做:
<div ng-controller="ListCtrl">
<ul ng-repeat="category in categories | customFilter:category">
<li>{{category.title}}</li>
</ul>
</div>
和过滤器:
app.filter('customFilter', [function () {
return function (items) {
var filtered = [];
angular.forEach(items, function (item) {
if(item.parent === 0 && indexOf(item) < 0) {
filtered.push(item);
}
})
return filtered;
}
}]);
查看更新后的柱塞:http://plnkr.co/edit/96aX0cqLT9SJX2YZquns?p=preview
有关过滤器的更多信息,请查看文档
- 如何在BookshelfJS中通过加入来过滤结果
- 使用PHP通过HTML表单选项选择器过滤MYSQL结果
- AEM/CQ应用程序:基于过滤结果的PDF生成器
- 停止 jQuery 自动完成以过滤/搜索结果并填充整个源数组数据
- 如何根据角度中的复选框选择过滤结果
- Angular自定义过滤器在处理某些匹配时注销,但会过滤掉所有结果
- Jquery 从选择选择的插件过滤结果
- 如何使用 backbone.localStorage 获取过滤结果
- 同位素过滤 - 无结果
- 在返回 1 结果时过滤主干集合
- 如何使用jquery从数据表中单击按钮时选择过滤结果
- 按关键字过滤 Google 地点 API 结果
- 过滤结果以显示与ng匹配的结果显示angular js
- 使用数组映射过滤带有if条件的结果
- 仅为instagram视频过滤结果-instafeed.js
- 如果选中复选框,则将结果过滤到前5个最高标记
- 迭代数组并将结果过滤到10
- JavaScript | AngularJS:根据日期过滤结果过滤项目
- 将数组结果过滤到下拉列表中
- NodeJs:用另一个集合的结果过滤mongo查询结果