2017-05-22 45 views
1

我在火力地堡DB以下節點使用$值:爲什麼我要在FirebaseObjectObservable

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

我找回這個網址是這樣的:

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

這就解決了一個問題! ;)謝謝Yevgen! –