【问题标题】:how to add value of each element in firebase database list?如何在firebase数据库列表中添加每个元素的值?
【发布时间】:2018-12-12 21:33:31
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: firebase-realtime-database ionic3 angularfire2


    【解决方案1】:

    您将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);
    });
    

    *未经测试的代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-21
      • 2021-09-15
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2012-03-07
      • 2014-11-17
      相关资源
      最近更新 更多