Angular 复选框过滤掉不工作的产品

阿克谢

您好,我正在尝试在 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牛仔裤和衬衫中的绿色产品如果我只显示牛仔裤数据,我只想显示牛仔裤的绿色产品。请帮忙。

安萨曼·贾斯瓦尔

colorcolors数组对象中看不到,它应该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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Typescript/Angular 2 - 过滤掉不包含特定字符串属性的对象

来自分类Dev

在Angular 2中使用管道过滤复选框

来自分类Dev

Angular JS,过滤时请记住复选框状态

来自分类Dev

如何过滤从Angular中的复选框值排序的列表?

来自分类Dev

Angular8复选框布尔过滤器

来自分类Dev

Angular8复选框布尔过滤器

来自分类Dev

在Angular 2中使用管道过滤复选框

来自分类Dev

Angular JS复选框-模型不默认为false

来自分类Dev

Angular JS复选框-模型不默认为false

来自分类Dev

Angular patchValue() 复选框

来自分类Dev

angular js中的复选框功能

来自分类Dev

Angular.js。复选框的型号

来自分类Dev

图像作为Angular中的复选框

来自分类Dev

Angular 2复选框preventDefault

来自分类Dev

使用Angular获取复选框的价值

来自分类Dev

Angular中的多个复选框

来自分类Dev

Angular 2 杠杆复选框输入

来自分类Dev

Angular 2 复选框值

来自分类Dev

Angular 中的复选框对象

来自分类Dev

复选框过滤仅适用于刷新Angular2

来自分类Dev

Angular.js带有复选框的过滤器搜索

来自分类Dev

无法使用 angular 2+ 中的复选框进行过滤

来自分类Dev

具有多个复选框条件的 angular4 数组过滤

来自分类Dev

Angular 2:带有复选框的数组无法正常工作

来自分类Dev

Angular JS复选框使用$ watch来计数选中的复选框

来自分类Dev

Angular 2 - 复选框列表 - 如何检查复选框的状态

来自分类Dev

如何计算Angular中的选定复选框?

来自分类常见问题

检查ANGULAR 10中是否已选中复选框

来自分类Dev

Angular 2使用ngFor设置和绑定复选框