Фон:
Я строю проект SIM-карты с Angular 7. Используя этот следующий канал, выберите соответствующие элементы внутри массива (список []) и отобразите его вUI.С заголовком (filterField) каждого элемента и входной строкой (ключевым словом).
поэтому у меня есть следующий код:
pipe
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(list:any[], filterField:string, keyword:string){
if(!filterField || !keyword){return list;}else{
return list.filter(item =>{
let fieldValue = item[filterField];
return fieldValue.indexOf(keyword)>=0;
}
)
}
}
}
Это список [] детали:
private products: Product[] = [
new Product(1, '1st Product', 1.99, 3.5, 'This is the 1st product, which is used for display', ['Electronics', 'Hardware']),
new Product(2, '2nd Product', 2.99, 2.5, 'This is the 2nd product, which is used for display', ['Books']),
new Product(3, '3rd Product', 3.99, 4.5, 'This is the 3rd product, which is used for display', ['Hardware']),
new Product(4, '4th Product', 4.99, 1.5, 'This is the 4th product, which is used for display', ['Electronics', 'Hardware']),
new Product(5, '5th Product', 5.99, 3.5, 'This is the 5th product, which is used for display', ['Electronics']),
new Product(6, '6th Product', 6.99, 2.5, 'This is the 6th product, which is used for display', ['Books'])
]
export class Product {
constructor(
public id: number,
public title: string,
public price: number,
public rating: number,
public desc: string,
public categories: Array<string>
) {
}
}
product.component.html
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<input class="form-control" placeholder="Please Input" [formControl]="titleFilter">
</div>
</div>
</div>
<div *ngFor="let product of products | filter:'title':keywordInput" class="col-md-4 col-sm-4 col-lg-4">
<div class="thumbnail">
<img src="https://via.placeholder.com/320x150">
<div class="caption">
<h4 class="pull-right">{{product.price}} Euro</h4>
<h4><a [routerLink]="['/product',product.id]">{{product.title}}</a></h4>
<p>{{product.desc}}</p>
</div>
<div>
<app-stars [rating]="product.rating"></app-stars>
</div>
</div>
</div>
product.component.ts
export class ProductComponent implements OnInit {
products:Array<Product>;
keywordInput:string;
titleFilter:FormControl=new FormControl;
constructor(private productService:ProductService) {
this.titleFilter.valueChanges.pipe(debounceTime(500))
.subscribe(
value => this.keywordInput = value,
);
}
ngOnInit() {
this.products=this.productService.getProducts();
}
}
Вопросы:
1. как понять
itemTitle => {
let fieldValue = itemTitle[filterField];
return fieldValue.indexOf(keyword) >= 0;
}
Я не мог понять часть itemTitle [filterField], я предполагаю, что itemTitle - заголовок каждого элемента, но как работает []?
.filter уже устарел в Angular 7?Есть ли альтернатива для этого?
для следующей части
return fieldValue.indexOf(keyword) >= 0;
Могу ли я использовать это для альтернативы?
if (fieldValue.indexOf(keyword) >= 0) {
return fieldValue.indexOf(keyword)
} else {return null;}
Когда я запускаю его, он не работает,
спасибо!