管道从 Firebase 获取数据

Pipe to get data from Firebase

我的管道没有返回名字。 当我硬编码一个名字时,它会返回。 为什么?

在html中:

{{photo.uid | userName}}

管道:

import { Pipe, PipeTransform } from '@angular/core';
import { UserData } from './../providers/user-data';

@Pipe({name: 'userName'})
export class UserNamePipe implements PipeTransform {
  name: string;

   constructor(private userData:UserData){}

  transform(value:any, args:string[]) {
   this.userData.getSpeseficUserData(value).subscribe((data:any) => {
     this.name = data.firstName;
     return this.name;
   });
 }
}

getSpeseficUserData():

getSpeseficUserData(uid:any){
  return Observable.create((observer: any) => {
    firebase.database().ref('users/' + uid).once('value').then((snapshot) => {
        observer.next(snapshot.val());
    })
  });
}

查看实际效果:plunker

首先,您必须 return 在 transform 方法中观察到一个对象,然后使用 async 管道显示您的数据:

管道:

transform(value:any, args:string[]) {
   return this.userData.getSpeseficUserData(value).map((data:any) => {
     this.name = data.firstName;
     return this.name;
   });
 }

模板:

{{photo.uid | userName | async}}