如何更新Firebase文档

时间:2019-05-19 11:10:50

标签: javascript firebase vue.js firebase-realtime-database google-cloud-firestore

当我尝试更新Firebase文档时,它在console中显示下面的错误消息

  

未处理的承诺拒绝FirebaseError:“函数   使用无效数据调用的DocumentReference.update()。不支持的字段   值:未定义(在字段名称中找到)“

我尝试使用console.log()进行调试,但发现在更新方法中无法识别变量editedItem

如何解决此问题

data: () => ({
    editedIndex: -1,
    editedItem: {
      id: 1,
      name: "SSFS",
      description: "XXXX"
    },
    newItem: {
      id: null,
      name: null,
      description: null
    }
  }),


    save() {
      if (this.editedIndex > -1) {
        // Update Category
        // Object.assign(this.desserts[this.editedIndex], this.editedItem);
        db.collection('categories').where('id', '==', this.editedItem.id).get().then( (querySnapshot) => {
          querySnapshot.forEach( (doc) => {
            doc.ref.update({
              name : this.editedItem.name,
              description : this.editedItem.description
            }).then(() => {
              this.$router.push('/categories') 
            })
          })
        })
      }
    }

错误:

  

未处理的承诺拒绝FirebaseError:“函数DocumentReference.update()用无效数据调用。不支持的字段值:未定义(在字段名称中找到)

1 个答案:

答案 0 :(得分:0)

您试图以错误的方式访问数据对象。 您应该将数据功能更改为对象。

所以而不是:

data: () => ({
editedIndex: -1,
editedItem: {
  id: 1,
  name: "SSFS",
  description: "XXXX"
},
newItem: {
  id: null,
  name: null,
  description: null
}

}),

只需从此实现中删除该功能,并将此数据作为常规对象显示即可。

执行以下操作:

data: {
editedIndex: -1,
editedItem: {
  id: 1,
  name: "SSFS",
  description: "XXXX"
},
newItem: {
  id: null,
  name: null,
  description: null
}

},

这将使您可以使用“ this”关键字访问数据对象并获得正确的值。

现在剩下要做的就是更改这些行:

name : this.editedItem.name,
description : this.editedItem.description

对此:

name: this.data.editedItem.name,
description: this.data.editedItem.description