我想在 Angular 中生成過濾器管道,用于過濾 Car、Brand 和 Color 陣列物件,其管道引數對應于它們的 "carName" 、 "brandName" 等屬性。
例如,此管道將按名稱過濾顏色,該名稱對應于過濾器管道引數的值。
但是我想用我創建的(物件的)名稱屬性來過濾所有物件型別。
為此,所有物件都需要具有相同的“名稱”屬性名稱。但是我的物件有不同的名稱屬性,例如;
carName:string (Car)
name:string (Brand)
name:string (Color)
我已經創建了一個管道,它可以在只有“名稱”屬性的物件上成功運行,但我無法成功地讓這個管道也可以在 Car 物件上運行;
@Pipe({
name: 'filter',
})
export class FilterPipe implements PipeTransform {
transform(entityList: any[], filter: string): any[] {
filteredList: typeof entityList;
if (filter) {
filter = filter.toLocaleLowerCase();
return entityList.filter((c) =>
c.name.toLocaleLowerCase().includes(filter)
);
}
return entityList;
}
}
如何創建一個通用管道以僅通過物件的屬性(包括“名稱”運算式)過濾具有其(物件的)名稱屬性的物件?
uj5u.com熱心網友回復:
我不知道細節——比如你的物件的其他屬性,如果它們都捆綁在同一個陣列中,或者你實際上有相同型別物件的陣列,甚至你如何以及在哪里使用管道——所以這是只是一個帶有一些假設和模型資料的例子:https ://stackblitz.com/edit/base-angular-12-app-qqw1fq
您的管道可能是:
transform(entityList: any[], filter: string): any[] {
let filteredList = entityList;
if (filter) {
filteredList = [];
filter = filter.toLowerCase();
entityList.forEach((c) => {
Object.keys(c).forEach((key, i) => {
if (key.toLowerCase().includes('name')) {
if (c[key].toLowerCase().includes(filter)) {
filteredList.push(c);
}
}
});
});
}
return filteredList;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/442547.html
標籤:javascript 有角度的 打字稿
