【发布时间】: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