【问题标题】:AngularFire2 document snapshotChanges returns undefinedAngularFire2 文档快照更改返回未定义
【发布时间】:2018-07-07 22:57:03
【问题描述】:

我创建了路由器保护,它首先获取经过身份验证的用户的 id,然后从 firestore 获取基于用户 id 的值,但是当我记录从 firestore 返回的数据时,它未定义(存在:false)。这是我的代码

project.guard.ts

export class ProjectGuard implements CanActivate {

item: Observable<any>;

constructor(
  private auth: AuthService,
  private afs: AngularFirestore,
) { }
canActivate(
  next: ActivatedRouteSnapshot,
  state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

this.item = this.afs.collection("project").doc(next.paramMap.get('pid')).snapshotChanges();

return this.auth.user.pipe(take(1), switchMap(u => {
  return this.item.pipe(
    take(1),
    map(data => {
      console.log(data)
      console.log("Hello: " + u.uid + " data: " + data.payload.doc.data());
      return true;
    }),
  );
})
)}

我收到了这个错误

错误错误:未捕获(承诺中):TypeError:无法读取未定义的属性“数据”

您知道为什么它未定义吗?当我尝试承诺时,它会起作用......

承诺

this.afs.collection("project").doc(next.paramMap.get('pid')).ref.get()

但是使用snapshotChanges()valueChanges() 则无法正常工作。我也尝试过简单的非嵌套管道。你有什么主意吗?谢谢

【问题讨论】:

  • 您是否在项目中启用了离线功能?
  • 不,我没有,我认为这不是这个应用程序的好主意

标签: javascript firebase rxjs google-cloud-firestore angularfire2


【解决方案1】:

您正在尝试调用data.payload.doc.data(),但如果您查看console.log(data) 的输出,您会发现它不包含任何data.payload.doc 属性。

data.payload,但没有data.payload.doc

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 2019-03-03
    • 2018-11-30
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多