2017-06-17 3 views
0

Sorry für die lange Frage. Ich habe eine Liste von Ereignissen, die ich wie diese:Firebase - Abrufen eines einzelnen Objekts

export class HomePageComponent implements OnInit { 

    events: FirebaseListObservable<EventModel[]>; 

    constructor(
    private authService: AuthService, 
    private router: Router, 
    private db: AngularFireDatabase 
) { 
    this.events = db.list('/events'); 
    } 

    ngOnInit() { 
    } 

} 

Veranstaltungen wie diese angezeigt:

<md-card *ngFor="let event of events | async"> 
    <a [routerLink]="['event', event.slug]"><img class="event-img" src="http://lorempixel.com/30/30" />{{ event.name }}</a> 
</md-card> 

Die event.component sieht wie folgt aus:

export class EventComponent implements OnInit { 

    event: Object; 
    name: String; 

    constructor(db: AngularFireDatabase, route: Router) { 

    const eventQuery = db.list('/events', { 
     query: { 
     orderByChild: 'slug', 
     equalTo: 'event-name' 
     } 
    }).subscribe(data => { 
     this.event = data[0]; 
    }); 

    } 

    ngOnInit() { 
    } 

} 

this.event abgeschlossen ist und der Korrekte Informationen werden abgefragt. Es sieht wie folgt aus:

Object {category: "category", description: "description", googleMap: "map", guests: Object, name: "Event name"…} 
category: "category" 
description: "description" 
googleMap: "map" 
guests: Object 
name: "Event name" 
slug: "event-name" 
venue: "The venue" 
$exists: function() 
$key: "-xxxxxxxx" 
__proto__: Object 

Wenn ich versuche, {{event.name}} den Namen angezeigt werden ich einen Fehler

ERROR TypeError: Cannot read property 'name' of undefined 
at Object.eval [as updateRenderer] 

Zusätzliche Frage erhalten:

Da die Ereignisinformationen bereits vorhanden in HomePageComponent, kann es sein, an EventComponent gesendet und verwendet, um das Ereignis anzuzeigen? Vielleicht vermeidet dies eine zusätzliche Datenbankabfrage.

Antwort

1

Verwenden sicherer Betreiber ?

<md-card *ngFor="let event of events | async"> 
    <a [routerLink]="['event', event?.slug]"><img class="event-img" src="http://lorempixel.com/30/30" />{{ event?.name }}</a> 
</md-card> 
+0

Hallo. Danke für die Antwort. Ich habe der 'event.component.html' den sicheren Operator hinzugefügt und es hat funktioniert. Ich habe keine Fehler in der 'homepage.component.html' wo der Link ist. Das klappt also. Hast du meine zusätzliche Frage bemerkt? – Ciprian

+0

upvote wenn es geholfen hat – Sajeetharan

Verwandte Themen