0

我正在使用 Angularfire2 库来登录用户并从 Firebase 数据库中获取数据,但是当用户点击注销时,会向控制台抛出以下错误:

无法在行读取 null 的属性“uid”

这是在任务组件方法的第uid2 行抛出错误的属性:ngOnInit

ngOnInit() {
    this.authSub1 = this.auth.authState.subscribe((auth) => {
        this.tasksSub = this.af.list(`users/${auth.uid}/tasks`, { preserveSnapshot: true }).subscribe(snapshots => {
            snapshots.forEach(snapshot => {
                this.tasksArray.push(snapshot.val().name);
            });
        });
    }, (err) => {this.openSnackBar(); console.log(err); });
}

然后我调用unsbuscribe上述订阅以避免该ngOnDestroy方法的内存泄漏:

ngOnDestroy() {
    this.authSub1.unsubscribe();
}

这是由位于主组件上的按钮触发的退出方法(主组件的路由器出口显示上述组件):

logout() {
    this.auth.auth.signOut()
    .then(() => { 
        this.router.navigateByUrl('/login'); 
    })
    .catch(function(err) {console.log(err); });
}
4

1 回答 1

0

找到了!解决方案非常简单:

为了避免在用户退出时用户 id 为空,我只需要避免使用uidfromauthState.subscribe回调参数,而是使用新创建的变量,而不是uid直接从注入的AngularFireAuth服务存储ngOnInit

this.userId = this.auth.auth.currentUser.uid;
于 2017-08-09T18:31:08.967 回答