У меня есть следующий сервис:
@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;
}
);
}
}
Но мне нужны данные, полученные из базы данных Firebase в моем HomeComponent.
@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, эта печатьundefined.
Могу ли я получить эти данные и распечатать их при открытии приложения?
РЕДАКТИРОВАТЬ:
Для запуска этого требуется только возврат Obvervable из DatabaseService.
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);
});
}
}
Спасибо за помощь!