Javascript Firebase没有';t返回值(角度2)
我尝试从Firebase中检索数据,它可以正常工作,但只适用于console.log()。 我无法将值返回到变量中 当我使用Angular 2和Typescript时,我有 服务:Javascript Firebase没有';t返回值(角度2),javascript,angularjs,typescript,firebase,angular,Javascript,Angularjs,Typescript,Firebase,Angular,我尝试从Firebase中检索数据,它可以正常工作,但只适用于console.log()。 我无法将值返回到变量中 当我使用Angular 2和Typescript时,我有 服务: import {Injectable} from "angular2/core"; import 'rxjs/Rx'; import {Observable} from "rxjs/Observable"; declare var Firebase: any; @Injectable() export class
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变量将一无所获。。。我想不出怎么解决这个问题。我想我需要一个可观察的,但我失败了,无论我想做什么
有人能帮忙吗?由于Firebase是事件驱动的,您需要将您的呼叫包装成可观察的:
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());
});
});
}
通过这种方式,您将能够通过订阅返回的可观察对象来接收值:
ngOnInit():any {
this._dataService.getAllData().subscribe(data => {
this.userData = data;
});
}
谢谢它现在可以工作了,但不知何故,这些值不会显示在formbuilder的输入字段中(作为默认值):我添加了一个新问题:事实上,数据是异步加载的。所以当表单创建时,它不在那里。稍后我会更新输入(在订阅回调中),如下所示:
this.userForm.controls.username.updateValue(this.userData.username)代码>