2017-03-05 7 views
0

Ich habe eine bestimmte Fragen bereits überprüft, aber immer noch nicht geschafft, mein Problem zu lösen. Ich bin ein Service in meiner app, die Observablen gibt, alles ist auf dieser Bühne in Ordnung, aber wenn ich die Daten angezeigt werden sollen, passiert nichts:eckig 2 * ngFor und Observables Object, keine Daten angezeigt

@Injectable() 
export class DataService { 

    private APIURL = 'http://api.dev/'; 

    constructor(private http: Http) { 
    } 

    _API_getEvents:string = this.APIURL + "getEvents"; 
    getEvents() : Observable<IEvent[]> { 
     return this.http.get(this._API_getEvents) 
     .map((res:Response) => res.json()) 
     .catch(this.handleError); 
    } 

    private handleError (error: Response | any) { 
     // In a real world app, we might use a remote logging infrastructure 
     let errMsg: string; 
     if (error instanceof Response) { 
      const body = error.json() || ''; 
      const err = body.error || JSON.stringify(body); 
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
     } else { 
      errMsg = error.message ? error.message : error.toString(); 
     } 
     console.error(errMsg); 
     return Observable.throw(errMsg); 
    } 


} 

Event-Schnittstelle:

export interface IEvent { 
    id: number; 
    name: string; 
    created_at:Date; 
    update_at:Date; 
} 

Und Komponente:

events:IEvent[]; 
//events:any[]; 

    constructor(private _http:Http, private _dataService: DataService) 
    { 
    this._dataService.getEvents() 
    .subscribe(

     function(response) { console.log("Success Response" + response); 

     this.events = response; 
     console.log('EVENTS: '); 
     console.log(this.events); 
     }, 
     function(error) { console.log("Error happened" + error)}, 
     function() { console.log("the subscription is completed")} 
    ); 
    } 

Wenn ich angezeigt werde versuchen, seine leer:

<ul *ngIf="events"> 
        <li *ngFor="let event of events"> 
         <a [routerLink]="['/gallery/', 'event1']"> 
          {{event.name}} 
         </a> 
        </li> 
... 

Was könnte das Problem sein?

+0

Können Sie ur-Code in plunkr setzen? Ich kann kaum etwas finden, das nicht funktioniert. Angenommen, die Daten werden auf der Komponentenebene getröstet. – Smit

+0

Console.log zeigt bis jetzt, dass Daten erfolgreich erhalten wurden, aber ich habe das Gefühl, dass die Ansicht davor gerendert wurde. Aber wenn ich nach ähnlichen Themen suche, fügen Leute normalerweise die * ngIf-Direktive hinzu und lösen das Problem, aber in meinem Fall ist es das nicht. Ich werde versuchen, plunkr – d123546

+0

zu erstellen Ich würde auch empfehlen, den Code in Ihrem Konstruktor zu ngOnInit zu verschieben. Wenn Sie mit der Verwendung von Eingabe-Bindings für Ihre Komponente beginnen, wird es nicht mehr so ​​funktionieren, wie Sie es erwarten würden. Wenn der Konstruktor aufgerufen wird, hat Angular noch keine Bindungen initialisiert. Es ist nur eine gute Übung, minimieren Sie die Arbeit, die Sie im Konstruktor Ihrer Komponente tun – snorkpete

Antwort

1

Verwenden Sie Pfeilfunktionen. Ohne sie ist this nicht auf die Komponenteninstanz in Ihrer Calback Funktion gebunden:

.subscribe(response => { 
    console.log("Success Response" + response); 
    this.events = response; 
}, 
... 
+0

Vielen Dank! Gelöst :) – d123546