我创建了路由器防护,该防护首先获取经过身份验证的用户的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:无法读取未定义的属性'data'
您是否知道为什么未定义?当我尝试保证它有效时...
承诺
this.afs.collection("project").doc(next.paramMap.get('pid')).ref.get()
但是对于snapshotChanges()
或valueChanges()
来说,它不起作用。我还尝试了简单的非嵌套管道。你有什么主意吗?谢谢
答案 0 :(得分:0)
您尝试调用data.payload.doc.data()
,但是如果查看console.log(data)
的输出,您会发现它不包含任何data.payload.doc
属性。
有data.payload
,但没有data.payload.doc
。