2017-05-28 123 views
0
我在创建搜索过滤器的问题

,我用的是* ngFor模块中和名称通常是这样的:滤波器阵列子阵

(game.name.toLowerCase().includes(typed)) 

但平台,在阵列来只工作时,我把指数:

(game.platform[i].toLowerCase().includes(typed)) 

然而这个平台是动态的,我不能使用的或流派的东西过滤

内的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

如果我正确理解你的问题,你的过滤器是不是做你想要什么。

第一个管道参数应该是一个数组。我认为只是 '任意' 的作品,但 '任何[]' 更干净:-)

你正在做的:

tranform(game: any,...) 

试试这个:

transform(game: any[], typed: string){ 

.... 

return game.filter(game => game.name.toLowerCase().indexOf(typed) > -1 || 
.... 
在开始搜索

进一步标记(键入)可能为空或为空。 为此,您应该添加以下内容以返回未过滤的数组。否则,你不会在你的* ngFor中看到任何东西。

if (typed == null || typed == "") 
    return game; 

希望这会有所帮助。

编辑:用

game.filter(game => game.platforms.some(el => el.toLocaleLowerCase().includes(typed))) 
名为
+0

所以更换示数线工程: (Game.name.toLowerCase()包括(类型)) ,但是,这是一个数组的平台,只能当我把 (Game.platform [1] .toLowerCase()。包括(打印)) 我希望这个动态数组的每个索引也能工作。 –

+0

不幸的是,这一行生成错误: 错误TypeError:无法读取未定义的属性'some' 与使用lowerCase时没有索引相同的错误 错误TypeError:无法读取未定义的属性'toLowerCase' –

+0

我不确定措辞。 '平台'或'平台** **'。一切都是......在你的json中,它是平台,在你的代码中,它是没有's'的平台。 – Ludwig