2016-08-03 21 views
0

Datenbank: FirebaseWie Sie einen Benutzer aus der Datenbank Innenansicht

Ein Benutzer kann einen Beitrag hinzuzufügen, die ein bisschen wie folgt aussieht:

postKey 
    content: 'Content of the post', 
    date: 'Date of post', 
    author: 'authorKey' (author key is a login) 

glaube ich nicht alle Benutzerinformationen innerhalb author speichern soll weil der Benutzer eines Tages etwas in seinem Profil ändern würde. Ich speichere nur Benutzerschlüssel innerhalb author und ich möchte diesen Benutzer erhalten, während Postdaten innerhalb der Ansicht drucken.

(Service) Das ist die Art, wie ich alle Beiträge bekommen (funktioniert richtig)

getPosts(): Promise<any> { 
    return new Promise(
     (resolve) => { 
     this.af.database.list('/posts') 
      .subscribe(response => { 
      if(response.length > 0) resolve(response); 
      }) 
     } 
    ) 
    } 

(Komponente) Hier habe ich assaign nur all diese Beiträge Array postet es Innenansicht zu drucken.

posts: any; 

    constructor(private homepageService: HomepageService) { 
    homepageService.getPosts().then(
     response => { 
     this.posts = response.reverse(); 
     }); 
    } 

(Ansicht) Mit Ausnahme allen Postdaten, die ich sehr leicht drucken können, würde Ich mag ein Benutzer von post.author bekommen Autor Daten wie Foto zu drucken, Vorname, Nachname usw.

<div *ngFor="let post of posts" class="post-body"> 
    {{post.content}} 
    {{homepageService.getUser(post.author)?.email}} 
</div> 

Auf diese Weise möchte ich den Benutzer erhalten. Hier ist getUser Funktion

getUser(key): Promise<any> { 
    return new Promise(
     (resolve) => { 
     this.af.database.object('/users/' + key) 
      .subscribe(response => { 
      resolve(response); 
      }) 
     } 
    ); 
    } 

Ich weiß, dass Zeile falsch ist {{homepageService.getUser(post.author)?.email}}, dass es keine then Innenansicht ist, aber ich habe auch versucht, Asynchron-Rohr. Jetzt bin ich still. Wie soll ich das machen?

Antwort

1
{{(homepageService.getUser(post.author) | async)?.email}} 

oder

{{(homepageService.getUser(post.author) | async).email}} 

mit

getUser(key): Observable<any> { 
    return this.af.database.object('/users/' + key); 
    } 
+0

In diesem Fall meine Seite abstürzt. Beiträge werden nicht angezeigt und ich kann nichts tun, kann nicht klicken. Alles ist gefroren. (keine Fehler in der Konsole). Beim Lesen von '' 'ist dies das erwartete Verhalten, da Sie bei jedem Aufruf der Methode eine neue Instanz des Versprechens zurückgeben, die, wenn aufgelöst, die Änderungserkennung auslöst, die ein neues Versprechen abruft, das die Änderungserkennung auslöst. .. '' ' – elzoy

+0

Was ist, wenn Sie die Observable zurückgeben, die Sie direkt vom Datenbankaufruf erhalten? (siehe meine aktualisierte Antwort) –

+0

Ja, ich habe das gleiche getan und es funktioniert. Vielen Dank. – elzoy