Я создаю фильтр продукта, похожий на Amazon, и, похоже, не может работать с несколькими фильтрами. Цель состоит в объединении фильтров, чтобы показывать только продукты, соответствующие выбранным фильтрам.Отфильтровать список продуктов с несколькими вариантами выбора
Вот фильтрация у меня в данный момент:
$scope.$watch('search', function(newVal, oldVal) {
if(newVal !== oldVal) {
var filteredProducts = $scope.products
if(newVal.types) {
filteredProducts = $filter('filter')(filteredProducts, { type: newVal.types })
}
if(newVal.vendors) {
filteredProducts = $filter('filter')(filteredProducts, { vendor: newVal.vendors })
}
if(newVal.colors) {
filteredProducts = $filter('filter')(filteredProducts, { variants: { options: newVal.colors } })
}
if(filteredProducts.length) {
$('.product').hide();
_.each(filteredProducts, function(elm) {
$('.product[data-id="'+elm.id+'"]').show();
})
} else {
$('.product').show();
filteredProducts = $scope.products
}
}
}, true)
Вот пол-рабочий пример:
http://codepen.io/rustydev/pen/NxpRqq/
В идеале, Флажки будут включены только тогда, когда отфильтрованный список содержит те опции.
Спасибо!
Вы устанавливаете filterProducts = $ scope.products каждый раз, когда вы вводите свои часы. Таким образом, ваш фильтр основывается на каждом списке продуктов каждый раз. – Harbinger