firebase 侦听来自具有Angular 的组件的火线更改

jpfvwuh4  于 2023-01-14  发布在  Angular
关注(0)|答案(1)|浏览(138)

我想访问多个组件中的一些数据。我创建了一个服务,它为此目的检索数据。当我试图观察我的数据时,问题出现了。我的代码:

@Injectable()
export class NotificationsService {

    constructor(private af: AngularFireDatabase) {}

    public retrieveNotifications(): Observable<NotificationObj[]> {
      return this.af.database.ref(refs.NOTIFICATIONS).on('value', snap => {
        const data = snap.val();
        return Object.keys(data).map(key => {
          return new NotificationObj(key, data[key]);
        });
      })
    }
}

我得到的信息是:
TS2322:类型“(a:数据快照B?:string)=〉any "不能赋给类型“Observable〈NotificationObj[]〉”。类型“(a:数据快照B?:字符串)=〉任意“。
如何转换我的方法以避免解析服务外部的数据,并保存侦听组件更改的可能性?

gijlo24d

gijlo24d1#

我在那里找到了解决方案Firebase error when subscribing to ref.on(‘value’, callback); | Property 'subscribe' does not exist on type '(a: DataSnapshot, b?: string) => any'
完整代码为:

public retrieveNotifications(): Observable<NotificationObj[]> {
    return Observable.create(subscriber => {
      const ref = this.af.database.ref(refs.NOTIFICATIONS);
      const callback = ref.on('value', snap => {
        const data = snap.val();
        const notifications = Object.keys(data).map(key => {
          return new NotificationObj(key, data[key]);
        });
        subscriber.next(notifications);
      });
      return () => ref.off('value', callback);
    })
  }

相关问题