2017-05-28 226 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