Угловой флажок фильтра с использованием трубы
Здравствуйте, я пытаюсь создать флажок угловой трубы, которая может фильтровать мои продукты при проверке. Контрольный список поступает динамически, как и список из того же файла JSON -
Флажок - следующий код создает флажки в компоненте
<div *ngFor="let b of prod.brand">
<input type="checkbox" value="{{b.BrandName}}" id="{{b.id}}" name="brandArray" [(ngModel)]="b[BrandSelected]">
<label for="{{b.id}}">{{b.BrandName}}</label>
</div>
Список продуктов - следующий код используется для получения списка продуктов
<div *ngFor="let prod of productListShow">
<div class="col-md-4" *ngFor="let product of prod.product | selectBrand: brandType">
<div class="sp-list-inner">
<figure>
<a href="#" target="_blank">
<img src="{{product.productImage}}" alt="{{product.productImageAlt}}">
<figcaption>
<h5 class="product-inner-title">{{product.productName}}</h5>
</figcaption>
</a>
</figure>
</div>
</div>
</div>
Checkbox Pipe - в следующем коде я сталкиваюсь с проблемой фильтрации продуктов, когда установлен определенный флажок
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'selectBrand'
})
export class SelectBrandPipe implements PipeTransform {
transform(brand: any, brandType?: any): any {
console.log('brand', brandType);
if (!brandType || brandType.length === 0) return brand;
return brand.filter(brandName =>
brandType.includes(brandName.companyName));
}
}
Я использую этот список, который вызывается службой. В этом сервисе я использовал productList: Products[];
для следующего списка -
export const PRODUCTS: Products[] = [
{
id: 1,
productCat:'Jeans',
brand: [
{
brandId: 'B1',
BrandName: 'Brand-1',
BrandSelected: true
},
{
brandId: 'B2',
BrandName: 'Brand-2',
BrandSelected: true
},
],
product: [
{
productId: 2,
productName: 'Brand 2 prod',
companyName: 'Brand-1',
},
{
productId: 3,
productName: 'Brand 2 prod',
companyName: 'Brand-2',
},
],
},
]
Пожалуйста, совет, как я могу это исправить. Если есть и другой метод, кроме трубы, пожалуйста, поделитесь
1 ответ
brandType не определен в компоненте. Проверьте файл компонента (заканчивающийся на.ts) и посмотрите, определен ли brandType (так не должно быть).
Проверить эту гипотезу было бы проще всего, просто передав некоторую строку в канал и посмотрев, не скажет ли она тогда что-то отличное от undefined.
ака.
<div class="col-md-4" *ngFor="let product of prod.product | selectBrand: 'car-brand'">
если после этого будет записано "brand car-brand" из console.log в трубе, то вы наверняка будете знать, что существует проблема с инициализацией вашей переменной brandType.
РЕДАКТИРОВАТЬ 1:
Чаще всего вы инициализируете и изменяете свои переменные в компоненте. Ака.
@Component..
export class ComponentA implements OnInit {
public brandType: string = 'car';
ngOnInit() { }
}