2017-05-22 8 views
1

に$値を使用する必要がない私は私のFirebase DB内の次のノードを持っている:はなぜFirebaseObjectObservable

users 
-$user 
--public 
---avatarUrl: 'https://myurl' 

私はこのように、このURLを取得:

lastMessage$: Observable<any>; 
    recipientAvatarUrl$: FirebaseObjectObservable<any>; 

    constructor(
    public navCtrl: NavController, 
    public messageService: MessageService, 
    public authService: AuthService, 
    public userService: UserService 
) { 
    console.log('ChatPreviewComponent#constructor'); 
    } 

    ngOnInit(): void { 
    this.recipientAvatarUrl$ = this.userService.getUserAvatarUrl(this.chat.recipient, this.authService.getCurrenUserCompany()); 
    } 

機能 "getUserAvatarUrl" であります

getUserAvatarUrl(uid: string, company: string): any { 
    console.log('UserService#getUserAvatarUrl - Get user avatar url for ', uid); 
    let path = `/${company}/users/${uid}/public/avatarUrl`; 
    return this.af.database.object(path); 
    } 

そして最後に、ここで私は、画像をレンダリングする私の見解は次のとおりです:私のサービスには以下のよう

<ion-item (click)="openChat(shortChat.id)"> 
    <ion-avatar item-left> 
    <img [src]="(recipientAvatarUrl$ | async)?.$value" /> 
    </ion-avatar> 
</ion-item> 

なぜノードの値を取得するために$ valueを使用する必要があるのか​​分かりません。しかし、非同期パイプは、AngularFire2のドキュメントに従ってFirebaseObjectObservableをアンラップします。

ヒント?

答えて

1

サブスクライブするFirebaseObjectObservableのノードにオブジェクトが含まれている場合、JavaScriptオブジェクトのようにフィールドにアクセスできます。

<img [src]="(recipientAvatarUrl$ | async)?.name" /> 

プリミティブ値(数値、文字列またはブール値)は$ valueの下に格納されます。

<img [src]="(recipientAvatarUrl$ | async)?.$value" /> 
+0

これは解決された問題の1つです。 ;)ありがとうYevgen! –

関連する問題