2017-05-02 1 views
2

私はAngfular 2をsymfony 3で使用しています。データ配列があり、いくつかのデータは同じです。私は同じデータを見せたいだけです。私はパイプを検索し、次のように見つかりました角2のgroupbyまたはフィルターパイプ

inline template:14:16 caused by: Cannot read property 'reduce' of undefined 

どのように私は私の問題を解決することができます:私はこのエラーを取得しています私のプロジェクトを実行すると

import { Pipe, PipeTransform } from "@angular/core"; 
@Pipe({name: 'groupBy'}) 
export class GroupByPipe implements PipeTransform{ 
transform(value: Array<any>, field:string): Array<any> { 
    const groupedObj = value.reduce((prev, cur) =>{ 
     if(!prev[cur[field]]) { 
      prev[cur[field]] = [cur] 
     } else{ 
      prev[cur[field]].push(cur); 
     } 

     return prev; 
    }, {}); 

    return Object.keys(groupedObj).map(key => ({ key, value: groupedObj[key] })); 
} 

} 

そして、私のテンプレート:

  <tr *ngFor="let model of data | groupBy:'firstName,lastName'"> 
      <td>{{ model.user.firstName || '-' }} {{ model.user.lastName || '-' }}</td> 
      </tr> 

今、私は実行することができますが、この時、私はfirstNameのundifenedエラーを取得。 firstNameをどのように呼び出す必要がありますか?

+0

このパイプを呼び出す場所からテンプレートを投稿する –

答えて

2
transform(value: Array<any>, field:string): Array<any> { 
    if (value) { 
     const groupedObj = value.reduce((prev, cur) =>{ 
     if(!prev[cur[field]]) { 
      prev[cur[field]] = [cur] 
     } else{ 
      prev[cur[field]].push(cur); 
     } 

     return prev; 
     }, {}); 

     return Object.keys(groupedObj).map(key => ({ key, value: groupedObj[key] })); 
    } else { 
     return null; 
    } 
    } 

もしそこ値は、あなたが例外をキャプチャする必要があります(データがまだロードまたは他の何かしていないときに起こる可能性が)定義されていません。