您好,我正在尝试在 angular 上创建一个电子商务页面,其中显示的产品带有复选框选项以过滤产品。但是我无法使复选框过滤器工作。请帮忙。
这是我的代码 -
<div class="brand-select">
<div class="brand-name">Select Color</div>
<form>
<div class="form-check brand-checkbox" *ngFor="let col of colors;let index = index">
<input class="form-check-input"
type="checkbox"
value="{{col.id}}"
id="{{col.id}}"
name="checkbox"
[(ngModel)]="col.selected"
(ngModelChange)="filterProducts()">
<label class="form-check-label" for="{{col.id}}">
{{col.productColor}}
</label>
</div>
</form>
</div>
<div *ngFor="let prod of productListShow">
<div *ngFor="let product of prod.product">
<h5 class="product-inner-title">{{product.productName}}</h5>
</div>
</div>
在我的组件.ts
文件中 -
public colors: any[] = [
{
id: 1,
productColor: "Black",
selected: false,
},
{
id: 2,
productColor: "Green",
selected: false,
}
]
constructor(private productservice: ProductService) { }
ngOnInit() {
this.productList = this.productservice.getProducts();
this.productListShow = this.productList;
}
public filterProducts(): void {
const filteredProductArray = new Array<any>();
const activeColors = this.colors.filter(c => c.selected).map(c => c.productColor);
this.productList.forEach(prod => {
const filteredSubProducts = prod.product.filter(p => activeColors.includes(p.productColor));
if(filteredSubProducts.length > 0){
const clonedProduct = Object.assign({}, prod);
clonedProduct.product = filteredSubProducts;
filteredProductArray.push(clonedProduct);
}
});
this.productListShow = filteredProductArray;
console.log(this.productListShow);
}
我从服务中获取我的产品ProductService
的数据,这里是产品的数据 -
import { Products } from './products';
export const PRODUCTS: Products[] = [
{
id: 1,
productCat:'Jeans',
product: [
{
productId: '1',
productName: 'Trendy Black',
productColor: 'Black',
},
{
productId: '2',
productName: 'Trendy Green',
productColor: 'Green',
},
],
},
]
更新 -
在我的逻辑中,我已将错误更正为 map(c => c.productColor)
现在,当我选中复选框时,它会过滤来自 each 的所有结果productCat
,因为我正在根据productCat
例如productCat
= Jeans加载产品,仅显示牛仔裤产品。
这是我的文件 -
import { Products } from './products';
export const PRODUCTS: Products[] = [
{
id: 1,
productCat:'Jeans',
product: [
{
productId: '1',
productName: 'Trendy Jeans',
productColor: 'Green',
},
{
productId: '2',
productName: 'Black tapered Jeans',
productColor: 'Black',
},
],
},
{
id: 2,
productCat:'Shirts',
product: [
{
productId: '1',
productName: 'Trendy Shirts',
productColor: 'Green',
},
{
productId: '2',
productName: 'Black Shirts',
productColor: 'Black',
},
],
},
]
因此,当我检查绿色时,它会过滤所有绿色数据,即显示productCat
牛仔裤和衬衫中的绿色产品。如果我只显示牛仔裤数据,我只想显示牛仔裤的绿色产品。请帮忙。
我color
在colors
数组对象中看不到,它应该c.productColor
在地图中为:
public filterProducts(): void {
...
const activeColors = this.colors.filter(c => c.selected).map(c => c.productColor);
...
}
更新1:
productCategory: string;
ngOnInit() {
this.activatedRoute.params .subscribe(params => {
if (params.type) {
this.productCategory = params.type;
}
...
});
}
public filterProducts(): void {
let filteredProductArray;
const activeColors = this.colors.filter(c => c.selected).map(c => c.productColor);
let productData = this.productList.find(product => product.productCat == this.productCategory);
this.productListShow = [];
if(productData) {
let filteredProductData = JSON.parse(JSON.stringify(productData))
let products = productData.product;
filteredProductData.product = products.filter(product => activeColors.includes(product.productColor));
this.productListShow.push(filteredProductData);
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句