AngularJS过滤记录中对应字段(数组)的值
AngularJS Filter records for corresponding value in a field (array) in record
我是一个AngularJS的新手,我一直试图得到一些答案,但没有运气,因此这篇文章。
我有一个对象数组(JSON),在单个对象中,有一个名为categories的字段,该字段实际上是一个数组本身,可以保存多个值。
我要找的过滤器是,有一个"select"用户会选择&;select&;Value和所有在其类别数组中具有该值的记录应该向用户显示,其余的可以隐藏。这个"选择";有多种选择,但我正在考虑保持单一选择。但是因为我想提供最好的产品,如果你能帮助我解决多个和单个选择的问题,我将非常感激。
下面是示例数据:
var工作=[{"ID"10","Title":"SQAEngineer"Employer":"XXXX","Address":"XXXFloor"Email":"XXXX"ContactNumber":","Description":"1年经验!","Qualification"XXXX"LastApplyDate":"2016 - 08 - 26","Type":"1","CreatedDT":"2016-08-0613:06:36","CreatedBy" null,"Categories":["25","28"]},{"ID"8","Title":"Maid","Employer":"XXX","Address":"XXX","Email":"XXXX","ContactNumber":"XXXX","Description":","Qualification":"NONE","LastApplyDate":"2016 - 08 - 26","Type":"1","CreatedDT":现状2016-08-06 t;12:27:17","CreatedBy" null,"Categories":["28"]}];
这里有两种不同的方法。一个非常简单,只需要使用基本的内置angularjs filter
api,另一个是通过创建我们自己的自定义过滤器来完成的。
第一个(简单)方法
作业类别的单值选择器,返回包含与所选类别匹配的所有作业。
编辑-更新代码&基于评论的演示!工作演示
<label>Category:
<select ng-model="category" ng-options="category.id as category.name for category in categories"></select>
</label>
<div class="results">
<div class="job-listing"
ng-bind="job | json"
ng-repeat="job in jobs | filter:{Categories: category}:true">
</div>
</div>
第二种(更高级)方法
作业类别的多值选择器,返回包含所有所选类别匹配的所有作业。(即。如果选择了"25"answers"26",则类别为["25"]的作业将返回false)
演示工作这里我们必须创建一个自定义过滤器,因为尽管angular的内置过滤器做了很多很棒的事情,但它也有它的局限性。
我们的自定义过滤器(匹配所有搜索条件)
app.filter("getMatches", function () {
return function (items, options) {
var options = options || {};
var searchField = options.searchField || "";
var searchTerms = options.searchTerms || [];
if (searchField === "" || !searchTerms.length || (searchTerms.length === 1 && searchTerms[0] === '')) {
return items;
}
return items.filter(function (item) {
return !searchTerms.some(function(term) {
return item[searchField].indexOf(term) === -1;
});
});
}
});
修改的过滤器(匹配任何搜索词)
app.filter("getMatches", function () {
return function (items, options) {
var options = options || {};
var searchField = options.searchField || "";
var searchTerms = options.searchTerms || [];
if (searchField === "" || !searchTerms.length || (searchTerms.length === 1 && searchTerms[0] === '')) {
return items;
}
return items.filter(function (item) {
return searchTerms.some(function(term) { // notice the subtle difference here
return item[searchField].indexOf(term) > -1; // and here
});
});
}
});
支持HTML <select multiple ng-model="selectedCategories" ng-options="category for category in categories"></select>
<div class="job-listing" ng-bind="job | json"
ng-repeat="job in jobs | getMatches:{searchField: 'Categories', searchTerms: selectedCategories}">
</div>
- 如何在javascript中访问数组的值
- Javascript-如何在窗体上方显示数组的值
- 根据优先级获取数组的值
- 来自 JavaScript 中数组的值的总和
- 读取通过push生成的数组的值
- 正在尝试获取事件之外的更新数组的值
- php代码返回基于数组的值
- 我可以'没有找到使用Javascript和HTML将数组的值发送到另一个页面的方法
- 将子数组的值传递到JavaScript中的CharCodeAt中
- 如何在javascript中复制数组的值并将其推送至相同的数组
- 将数组的值传递到HTML文本框中
- 使用jquery获取数组的值
- 如何检查一个数组的值是否与另一数组的值不相等
- 如何将变量设置为给定时刻数组的值,而不是数组的任何值
- 使用 javascript 捕获数组并使用数组的值
- 获取可观察数组的值
- Javascript - 检查数组的值
- 如何在 JSON 中的数组中访问数组的值
- 将数组的值回显到 jQuery 中
- 按数组的值对数组进行排序