2016-08-05 15 views
6

veriler Ben yazarın adını taşıyan bir yazı işlemek isteyen buFirebase: katılmadan tabloları

post: { 
    authorId: '123AA', 
    title: 'first Post', 
    body: 'yay' 
} 

author: { 
    uid: '123AA', 
    displayName: 'Richard' 
    email: '[email protected]' 
} 

benziyorsun varsayın: A getirilen sonrası öğesi yalnızca bir yazar en uid içeren

<div className="post"> 
    <div className="title">{post.title}</div> 
    <div className="body">{post.body}</div> 
    <div className="author-name">{post.author.displayName}</div> //problem 
</div> 

ama Yazarın displayName'a ihtiyacım var. Yayınları alırken yazar alanını nasıl doldurabilirim? Gerçek Firebase içinde

const postsRef = firebase.database().ref('posts/') 
postsRef.on('value', (snapshot) => { 
    this.setState({posts: snapshot.val()}) 
}) 
+1

Onun iyi etiketlerinden reactjs giderilmesine yardımcı olur, soru Bildiğim kadarıyla seni bildiği gibi – webdeb

+1

Tepki ile ilgisi yoktur Firebase ile "birleşir" yapamazsınız, başka bir koleksiyondan –

+1

bir şey almak için ikinci bir istekte bulunmanız gerekir, bu yüzden insanlar ne yapar? Eklenen her gönderi için, kullanıcı nesnesini sunucudan almak için başka bir istekte bulunursunuz? –

cevap

7

Emin değilim, ama angular2 oldukça sık katılmak kullanın: Bu şu anda Mesajları getirmesi ne olduğunu. İşte benim örnek kodum.

import { Component, OnInit } from '@angular/core'; 
import { AngularFire } from 'angularfire2'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 

@Component({ 
    selector: 'app', 
    templateUrl: ` 
    <ul> 
     <li *ngFor="let p of posts | async"> 
      {{ p.title }} - {{ (p.authorName | async)?.displayName }} 
     </li>   
    </ul> 
` 
}) 
export class InitComponent implements OnInit { 
    posts: Observable<any[]>; 

    constructor(private af: AngularFire) {} 

    ngOnInit() { 
     this.posts = this.af.database.list('/posts') 
     .map(posts => { 
      posts.map(p => { 
       p.authorName = this.af.database.object('/authors/'+p.authorId); 
      }); 
      return posts; 
     }); 
    } 

veritabanı yapısı aşağıdaki gibidir:

/posts/postId/{authorId, title, body} 
/authors/authorId/{displayName, email} 

Umut bu