我试图从 firebase
数据库中获取详细信息,但继续获取 undefined
这是我从数据库中获取Object的代码:
import { AppUser } from './models/app-user';
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireObject } from 'angularfire2/database';
import * as firebase from 'firebase';
@Injectable({
providedIn: 'root'
})
export class UserService {
constructor(private db: AngularFireDatabase ) { }
get(uid: string): AngularFireObject<AppUser> {
console.log(this.db.object('/users/' + uid));
return this.db.object('/users/' + uid);
}
}
此 get
方法的控制台日志是: [object Object]
我找不到如何获取该用户的用户名或其他信息 .
这是我的AppUser:
export interface AppUser {
email: string;
isAdmin: boolean;
name: string;
}
我找到了一些答案,但它与Angular的旧版本有关,并没有帮助我解决问题 . 我还看到了一些与异步管道相关的答案,但这是在HTML中,我需要在service.ts文件中提供数据 . 我需要在我的组件中获取结果(而不是在html中) .
我试图像这样提取用户的数据:
get appUser$(): Observable<AppUser> {
return this.user$
.pipe<AppUser>(map(user => {
if ( user ) {
this.userService.get(user.uid);
}
}));
}
但是日志再次说我得到 [object Object]
......
在我需要使用此信息的最终方法中:
canActivate() {
return this.auth.appUser$
.pipe(map(user => {
console.log(user);
return user.isAdmin;
}));
}
控制台日志给 undefined
3 回答
使用 JSON.stringify
您将返回AngularFireDatabase .
您想订阅AngularFireObject . 所以,你必须打电话:
而且,您可以订阅并显示组件中的对象 .
--Updated--当前对象类型是单个对象的AngularFireObject和对象列表的AngularFireList . 你仍然需要调用.valueChanges()来获得observable .
我已经设法在你和其他博客的帮助下解决了这个问题 . 非常感谢!这是完整的解决方案:
用户service.ts文件:
这是Authentication service.ts文件:
console.log(appUser.isAdmin) - 提供保存在数据库中的正确属性 .