我在创建搜索过滤器时遇到问题,我在模块中使用* ngFor,名称通常如下:
(game.name.toLowerCase().includes(typed))
但是,当我放入索引时,进入数组的平台才起作用:
(game.platform[i].toLowerCase().includes(typed))
然而,这个平台是动态的,我不能在过滤器
中使用for或类型的东西的Json
[
{
"name":"GTA",
"platform":[
"xbox",
"playstation"
]
}
]
组件
<tr *ngFor="let game of (games | searchGame:SearchedText.value)">
<td>{{game.name}}</td>
<td>{{game.category}}</td>
<td>{{game.platform | separator}}</td>
// "platform":["Playstation 4","Xbox One"]
<td>{{game.price | currency}}</td>
<td>{{game.quantity}}</td>
<td>{{game.production ? 'Sim' : 'Não'}}</td>
<td>{{game.description}}</td>
<td><i class="fa fa-pencil icon" aria-hidden="true" (click)="staticModal.show()"></i></td>
<td><i class="fa fa-times icon" aria-hidden="true" (click)="staticModal.show()"></i></td>
</tr>
管
transform(game, typed){
typed = typed.toLowerCase();
return game.filter( game =>
(game.name.toLowerCase().includes(typed)) ||
(game.category.toLowerCase().includes(typed)) ||
(game.platform.toLowerCase().includes(typed)) || // Error in this line
(game.price.toLowerCase().includes(typed)) ||
(game.quantity.toLowerCase().includes(typed)) ||
(game.production.toLowerCase().includes(typed)) ||
(game.description.toLowerCase().includes(typed))
);
}
答案 0 :(得分:0)
如果我理解你的问题,你的过滤器就没有做你想要的。
第一个管道参数应该是一个数组。我认为只是&#39;任何&#39;可以工作,但任何[]&#39;更干净: - )
你在做:
tranform(game: any,...)
试试这个:
transform(game: any[], typed: string){
....
return game.filter(game => game.name.toLowerCase().indexOf(typed) > -1 ||
....
此外,您的搜索令牌(已键入)可能为null或为空。 为此,您应该添加以下内容以返回未过滤的数组。否则你不会在* ngFor。
中看到任何内容if (typed == null || typed == "")
return game;
希望这有点帮助。
编辑:用
替换错误行game.filter(game => game.platforms.some(el => el.toLocaleLowerCase().includes(typed)))