firebase-realtime-database - 如何在firebase数据库列表中添加每个元素的值?
问题描述
我正在使用 ionic 和 Angular 开发混合应用程序,使用 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。
解决方案
您正在设置uList
为可观察对象,然后永远不会订阅它。阅读observables 和 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);
});
*未经测试的代码
推荐阅读
- r - 按 ID 和处理分组的线性插值
- apache-flink - Flink MapStateDescriptor 更新 List 值
- vba - 如何使用 VBA 从 Excel 将项目的描述和所有者字段以及任务的状态管理器字段导入 MS Project
- c++ - 为什么字符指针有废话?
- deployment - 我在构建项目时遇到了这个问题
- intellij-idea - 在 IntelliJ 中关闭文件结构弹出窗口的操作的名称是什么?
- php - 无法在 Ubuntu 上使用 Apache 2.4 运行 PHP 8
- html - laravel - 在正确的选项卡中显示验证错误
- java - 为什么我不能让 java 绑定 (GDAL) 工作
- angular - 有没有办法显示信息窗口,如果我点击后退按钮(浏览器)发出警告并重新加载 reacitveForms