Angularfire2快照更改订阅管道问题

时间:2018-10-01 16:28:56

标签: angular firebase angularfire2

我使用的是@ angular / fire,我只有数据库的snapshotChanges(),现在我尝试订阅它以保持始终更新。

    return this.db.list<Plan>(this.BASE_PATH).snapshotChanges().subscribe(
      item => {
        return item.map(a => {
            var p = new Plan;
            p.key = a.payload.key;
            p.name = a.payload.child(this.NAME).val();
            p.descripton = a.payload.child(this.DESCRIPTON).val();
            p.isPublic = a.payload.child(this.ISPUBLIC).val() == 'false' ? false : true;

            return p;
        })
      }
    );

但这会导致async管道出现问题,并给我一个错误:

ERROR Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'
    at invalidPipeArgumentError (common.js:3981)
    at 

错误实际上更长,但只是为了告诉您。

也许您有任何想法

2 个答案:

答案 0 :(得分:1)

您是否在模板中使用了asyncpipe?如果是这样,则无需在ts类上订阅snapshotChanges()。 asyncPipe可以做到这一点

答案 1 :(得分:1)

您应该使用subscribe方法和.pipe运算符代替map。如前所述,您不能在订阅上使用async模板管道:

return this.db.list<Plan>(this.BASE_PATH).snapshotChanges().pipe(
  map((items) => items.map(a => {
    const p = new Plan;
    p.key = a.payload.key;
    p.name = a.payload.child(this.NAME).val();
    p.descripton = a.payload.child(this.DESCRIPTON).val();
    p.isPublic = a.payload.child(this.ISPUBLIC).val() == 'false' ? false : true;

    return p;
  }))
);