Как использовать 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;

Вот полный пример

Другие вопросы по тегам