angular - 当我从 Firebase 获取数据时属性未定义
问题描述
我有以下服务:
@Injectable({
providedIn: 'root'
})
export class DatabaseService {
private users: any[] = [];
constructor(private db: AngularFireDatabase) { }
getUsuarios(): any {
this.db.database.ref('/users').once('value').then(
data => {
let users;
usuarios = data.val() ? data.val() : {};
console.log(users);
return users;
}
);
}
}
但我需要从 HomeComponent 中的 Firebase 数据库获取的数据。
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
users: any[] = [];
constructor(private _databaseService: DatabaseService) {
this.users = this._databaseService.getUsuarios();
console.log(this.users);
}
ngOnInit() {
}
}
当我显示我的 console.log 时,这个打印未定义。
当我打开我的应用程序时,我可以获取这些数据并打印吗?
编辑:
只有我需要从 DatabaseService 返回 Obvervable 来运行它。
getUsuarios(): Observable<any> {
let usuarios: any;
/*let usuarios = new Observable<any>();
this.db.database.ref('/usuarios').on('child_added', (snapshot) => {
usuarios = new Observable<any>().of(snapshot.val());
});
return usuarios;*/
return Observable.create(observer => {
// this.db.database.ref('/usuarios').on('child_added', (snapshot) => {
this.db.database.ref('/usuarios').once('value').then( snapshot => {
usuarios = snapshot.val();
observer.next(usuarios);
observer.complete();
});
});
}
并更改 ngOnInit
export class HomeComponent implements OnInit {
private _UsuariosObservable: Observable<any>;
public usuarios: any[] = [];
constructor(private _databaseService: DatabaseService) { }
ngOnInit() {
this._UsuariosObservable = this._databaseService.getUsuarios();
this._UsuariosObservable.subscribe((data) => {
this.usuarios = data;
for (let i = 0; i < this.usuarios.length; i++) {
console.log(this.usuarios[i]);
}
}, ( err ) => {
console.log(err);
});
}
}
感谢帮助!
解决方案
您需要订阅如下,
this._databaseService.getUsuarios().subscribe((res)=>{
this.users = res;
},(err)=>{
console.log(err);
});
推荐阅读
- mysql - MySQL:分类法 - 获取属于多个类别的 ID
- java - 如何从android中的动态视图中获取所有每个值以执行计算
- javascript - 获取用户列表的 Google Groups
- ethereum - 以太坊交易给出错误“无效发件人”
- python - 使用 subprocess.run 启动时批处理执行被阻止
- asp.net - 在 IIS 上的 Web 发布包中配置应用程序池
- c# - 实体框架提供程序类型“FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient”的“实例”成员
- ios - 如何在 Objective-C 中添加 NSDictionary 作为值?
- python - 即使在 python 中检查三次代码后也出现语法错误
- angular - Angular:发送带有空请求正文的 POST 请求