我正在尝试使用角过滤记录集,我遇到了一个问题。
var licenseKeys = [
{"product" : "XBox360", "inventoryProduct" : "XBox", "serialNumber" : "101", "status" : "Active", "actionBy" : "gamer1", "licenseKey" : "XB2-c40100697d-40b5bc3", "expiry" : "No Expiration"},
{"product" : "XBox360", "inventoryProduct" : "XBox", "serialNumber" : "110", "status" : "Active", "actionBy" : "gamer2", "licenseKey" : "XB2-c4010697d-c9d7001", "expiry" : "No Expiration"},
{"product" : "PS4", "inventoryProduct" : "Play Station", "serialNumber" : "111", "status" : "Active", "actionBy" : "gamer1", "licenseKey" : "PS4-c40100697d-c9d7081", "expiry" : "No Expiration"},
{"product" : "PS3", "inventoryProduct" : "Play Station", "serialNumber" : "105", "status" : "InActive", "actionBy" : "gamer3", "licenseKey" : "PS3-c9d708000001", "expiry" : "No Expiration"},
{"product" : "XBox One", "inventoryProduct" : "XBox", "serialNumber" : "109", "status" : "Active", "actionBy" : "gamer3", "licenseKey" : "XB3-40009b5bc3-c9d708000001", "expiry" : "No Expiration"},
{"product" : "XBox", "inventoryProduct" : "XBox", "serialNumber" : "103", "status" : "Active", "actionBy" : "gamer1", "licenseKey" : "XB-c40100697d-c708d000001", "expiry" : "No Expiration"}
];
我在表中显示记录集,并在表标题下有筛选器下拉列表和文本框。我希望在Product 列上与完全匹配,因为选择XBox的产品会导致它在使用标准包含搜索时返回XBox、Xbox360和XBox 1。
我已经设置了两个数组,一个用来保存过滤器的键值对,另一个用来保存我想要执行精确匹配的列。
var strictSearchFields = ["product", "status"];
var searchFilter = {
product: "",
inventoryProduct: "",
serialNumber: "",
status: "",
actionBy: "",
licenseKey: "",
expiry: ""
};
我在我的app.js文件中设置了一个自定义过滤器
app.filter('CustomListPageFilter', ['$filter', function($filter) {
return function (input, searchFilters, strictSearchFields) {
var filteredRecordset = [];
angular.forEach(strictSearchFields, function (currentFilter) {
if (searchFilters[currentFilter] !== "") {
var test = currentFilter;
filteredRecordset[currentFilter] = searchFilters[currentFilter] + " : true";
}
});
return $filter('filter')(input, filteredRecordset);
}
}]);
我在我的HTML中这样称呼它:
licenseKeys | CustomListPageFilter : searchFilter : strictSearchFields
问题是它没有按预期运行,而且无论我选择哪种产品,我最终都不会返回任何内容。我读到了这样的补充:正确地搜索您想要搜索的字段将绕过包含,但这似乎不起作用。
发布于 2015-10-22 17:29:27
我认为内置过滤器应该符合您的要求,您只需在过滤器中指定{field: query}对象,如下所示:
collection | filter:{'product': 'XBox'}:true
有关尽可能接近您提供的代码的示例,请参见
http://plnkr.co/edit/lhwEKUNGOsLtDXjGAsu9?p=catalogue
我使用一个范围变量而不是一个显式对象来控制搜索查询,并使用一个复选框来切换“严格模式”。
发布于 2016-01-05 15:51:50
我实际上用一个自定义过滤器解决了这个问题。本质上,它被称为这样,但柱塞拥有所有的代码。
<tr ng-repeat="license in filteredLicenseKeys = (licenseKeys |
orderBy:'status' | licenseKeyFilter : searchFilters :
strictSearchFields)">
https://stackoverflow.com/questions/33284944
复制相似问题