【发布时间】:2023-03-05 22:06:01
【问题描述】:
我正在构建一个类似于 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/
理想情况下,仅当过滤列表包含这些选项时才会启用复选框。
谢谢!
【问题讨论】:
-
每次进入手表时,您都会设置filteredProducts = $scope.products。因此,您的过滤器每次都基于整个产品列表。
标签: angularjs