2016-04-10 3 views
0

私は角2/TSの初心者です。強く型付けされた配列をhtmlでバインドするには

私は、このコンポーネントをschoolyearsあります

export class SchoolyearsComponent implements OnInit { 

    schoolyears: Schoolyear[] = new Array(); 
    constructor(
     private _router: Router, 
     private _schoolyearsService: SchoolyearsService) { 
    } 

    ngOnInit() 
    { 
     this._schoolyearsService.getSchoolyears().subscribe(s => { 
      this.schoolyears.push(new Schoolyear(s)); 
     }); 
    } 
} 

私はUIに表示したいデータがJSONデータとして来ています。私は、カスタムJSchool.earクラスのjsonデータをラップし、それをUIでバインドする必要があります。

export class Schoolyear { 

    constructor(obj) 
    { 
     this.id = obj.id; 
     this.name = obj.name; 
     this.startDate = new Date(obj.startDate); 
     this.endDate = new Date(obj.endDate); 
    } 

    id: number; 
    name: string; 
    startDate: Date; 
    endDate: Date; 
} 

<div> 
    <div *ngFor="#s of schoolyears"> 
     <div style="font-weight:bold;"> 
      <h4>{{s.id}}</h4> 
      <h4>{{s.name}}</h4> 
      <p>{{ s.startDate}}</p> 
      <p>{{ s.endDate}}</p> 
     </div> 
    </div> 
</div> 

これらの4つのプロパティはいずれもUIに表示されません。

jsonデータを正しくラップしてUIに表示するにはどうすればよいですか?

コンソール出力にエラーは発生しません。

答えて

0

私はそのような何かしようとするだろう:あなたのケースでは

this._schoolyearsService.getSchoolyears().map(years => { 
    return years.map(year => new Schoolyear(year)); 
}).subscribe(years => { 
    this.schoolyears = years; 
}); 

を、あなたはSchoolyearクラスのパラメータとして全体のリストを提供します。

+0

ああ本当ですか??私は、.map関数がLinqと.selectのように機能すると思った。ああ...本当に遅いのは私も地図を使用していません...私は欲しかった... – Pascal

+0

1つのマップコールで動作するため、2つのマップ呼び出しを使用する理由はわかりません:this._schoolyearsService.getSchoolyears()。subscribe (年=> { this.schoolyears = years.map(y =>新しい学年(y)); }); – Pascal

+0

あなたの場合は似ています。マッピングをサービスに移す場合は、これが必要です。この場合、データフローを適合させるためには、観測可能なマップ演算子が必要です。それ以外の場合は、配列のマップメソッドで十分です;-) –

関連する問題