2017-05-22 47 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! –