我有可以扩展搜索范围的代码,但我需要缩小搜索范围的帮助。一个例子是添加标签(颜色、绿色),并且仅显示“颜色绿色”,而不显示所有颜色和 ARM 。
这是我的示例:http://codepen.io/stvgale/pen/vxzBXO
app.filter('filterByTags', function () {
return function (items, tags) {
if (!tags || !tags.length) {
return items;
}
var lowerTags = angular.copy(tags);
angular.forEach(lowerTags, function (tag) {
tag.text = angular.lowercase(tag.text);
});
var filtered = [];
(items || []).forEach(function (item) {
var matches = lowerTags.some(function (tag) {
return (angular.lowercase(item.data1).indexOf(tag.text) > -1) ||
(angular.lowercase(item.data2).indexOf(tag.text) > -1);
});
if (matches) {
filtered.push(item);
}
});
return filtered;
};});
最佳答案
您可以使用正则表达式
加入标签数组以获取搜索文本
var searchtext = lowerTags.map(function(elem){
return elem.text;
}).join(" ");
例如,如果您的标签是颜色,绿色
var searchtext
将为绿色
然后您可以使用此文本作为正则表达式模式来检查哪些项目匹配
var patt = new RegExp(searchtext,'i');
并返回匹配的项
var filtered = [];
(items || []).forEach(function (item) {
var matches = lowerTags.some(function (tag) {
return patt.test(item.data2);
});
if (matches) {
filtered.push(item);
}
});
return filtered;
关于javascript - 如何使用ngTagsInput过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038118/