Как использовать ngTagsInput для фильтрации данных
У меня есть код, который расширит поиск, но мне нужна помощь в сужении. Примером может быть добавление тегов (цвет, зеленый) и отображение только "зеленого цвета", а не всех цветов и руки.
Вот мой пример: 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;
};});
1 ответ
Вы можете использовать регулярное выражение
Присоединитесь к массиву тегов, чтобы получить текст для поиска
var searchtext = lowerTags.map(function(elem){
return elem.text;
}).join(" ");
Например, если вы ваши теги color,green
var searchtext
было бы color green
а затем вы можете просто использовать этот текст в качестве шаблона регулярного выражения, чтобы проверить, какие элементы соответствуют
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;
Вот полный пример