我正在使用离子和角度的混合应用程序,并使用angularfire2将数据存储到Firebase数据库中
上面是firebase中列表的图像,现在我想添加列表中每个节点的 totalCalories
这是我的代码
let count = 0;
uList : Observable<any[]>;
this.uList = this.dbServ.getConsumedFoodList(this.authServ.getUID()).snapshotChanges();
this.uList.forEach(item => {
item.forEach(itemData => {
this.food = itemData.payload.val();
console.log(this.food.totalCalories);
count = count + this.food.totalCalories;
})
})
但是没有任何计数,它仅给出0。
答案 0 :(得分:0)
您正在将uList
设置为可观察的,然后再不订阅它。阅读observables and subscriptions,您将了解为什么您的代码无法正常工作。基本上,您说的是“ 这是我要收听的数据”,但实际上您从未真正开始收听。
除非您需要不断更新客户端信息,否则我建议您跳过使用.snapshotChanges()
...,除非您真的想要真正的使用,否则使用(并订阅它)是一种方法。实时更新...。为简单起见,我建议您使用.value('once')
之类的方式提取数据:
let count = 0;
let uList = [];
let uid = this.authServ.getUID();
this.(AngularFireDatabaseVariable).database.ref(uid).once('value').then(dataReturnedAsObject => {
uList = dataReturnedAsObject.val();
uList.forEach(eachItem => {
console.log(eachItem.totalCalories);
count += eachItem.totalCalories;
});
}).catch(err => {
console.log('Error getting data from database');
console.log(err);
});
* 未经测试的代码