2016-04-10 13 views
0

Ich bin ein eckiger 2/TS Anfänger.Wie bind ich ein stark typisiertes Array in html

Ich habe dieses Schuljahr Komponente:

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)); 
     }); 
    } 
} 

Die Daten, die ich in der Benutzeroberfläche angezeigt werden soll als JSON-Daten kommen. Ich muss diese JSON-Daten in eine benutzerdefinierte Schooleear.ts-Klasse umbrechen und dann in der Benutzeroberfläche binden.

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> 

Keine dieser 4 Eigenschaften sind in der Benutzeroberfläche angezeigt.

Wie wickle ich die JSON-Daten korrekt um und zeige sie in der Benutzeroberfläche an?

Ich bekomme keine Fehler in der Konsolenausgabe.

Antwort

0

würde ich so etwas versuchen:

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

In Ihrem Fall bieten Ihnen die gesamte Liste als Parameter der Schoolyear Klasse.

+0

Oh wirklich? Ich dachte, die .map-Funktion funktioniert wie die .select mit Linq. Ahh ... es ist wirklich spät haha ​​Ich benutze nicht einmal map ... Ich wollte ... – Pascal

+0

Ich weiß nicht, warum Sie zwei Kartenaufrufe verwenden, weil es mit einem Kartenanruf funktioniert: this._schoolyearsService.getSchoolears(). Subscribe (Jahre => { this.schoolyears = years.map (y => neues Schuljahr (y)); }); – Pascal

+0

In Ihrem Fall ist es ähnlich. Sie benötigen dies, wenn Sie das Mapping in Ihren Service verschieben möchten. In diesem Fall ist der Kartenoperator beobachtbar, um den Datenfluss anzupassen. Sonst hast du recht die Map-Methode aus Array ist genug ;-) –

Verwandte Themen