[英]Firebase doesn't return value (Angular 2)
我尝试从我的Firebase检索数据并且它可以工作,但是JUST用于console.log()。 我无法将值返回到var ...
因为我正在使用Angular 2和Typescript
服务:
import {Injectable} from "angular2/core";
import 'rxjs/Rx';
import {Observable} from "rxjs/Observable";
declare var Firebase: any;
@Injectable()
export class DataService {
getAllData() {
const firebaseRef = new Firebase('https://XYZ.firebaseio.com/path/user')
firebaseRef.on("value", function (snapshot) {
console.log(snapshot.val()); // THIS WORKS!
return snapshot.val(); // THIS DOES NOT WORK!
});
}
和一个组件:
@Component({
templateUrl: 'templates/user.tpl.html',
providers: [DataService],
})
export class UserComponent implements OnInit{
userData: any;
constructor(private _dataService: DataService){}
ngOnInit():any {
this.userData = this._dataService.getAllData();
console.log(this.userData); // THIS DOES NOT WORK: UNDEFINED
}
如果我运行它,我的userData var得不到任何东西......我无法想出如何解决这个问题。 我以为我需要一个Observable但是我失败了,无论我试图做什么......
有人可以帮忙吗?
由于Firebase是事件驱动的,因此您需要将调用包装成一个observable:
getAllData() {
const firebaseRef = new Firebase('https://XYZ.firebaseio.com/path/user')
return Observable.create((observer) => {
firebaseRef.on("value", function (snapshot) {
console.log(snapshot.val());
observer.next(snapshot.val());
});
});
}
通过这种方式,您可以通过订阅返回的observable来获得价值:
ngOnInit():any {
this._dataService.getAllData().subscribe(data => {
this.userData = data;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.