我有一个管理区域,该区域从Firebase收集阵列中的所有数据。我的任务是更新数据并将其发送给特定用户的Firebase(我需要发表一些评论)。问题是在.doc('id of document')
中,我不知道如何获取Firebase中文档的特定ID。如果我输入了特定文档的ID(例如"2jzm4AcWTVNIlT9ESH7V"
),则函数可以正常工作。 doc.data()
从Firebase返回所有数据,每个ID与数据一起存储在对象中。
<script>
import moment from 'moment'
export default{
// ...
mounted(){
db.collection("form").where("posted_at", ">=", 1)
.get()
.then(querySnapshot => {
querySnapshot.forEach(doc=> {
console.log(doc.id, " => ", doc.data());
this.array.push(Object.assign({}, doc.data(), {id: doc.id}));
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
},
methods:{
comment(){
let id=this.array.id;
db.collection("form")
.doc(id)
.update({
comment: this.comment1 //data(){return{comment1:''}}
})
.then(function() {
console.log("Document successfully written!");
})
.catch(function(error) {
console.error("Error writing document: ", error);
});
}
}
};
</script>
P.S。我收到此错误的函数:
FirebaseError: [code=invalid-argument]: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: undefined
答案 0 :(得分:1)
第let id=this.array.id;
行试图获取数组本身的id
属性,而不是数组中条目的ID。
基于您遵循的YouTube tutorial,当在comment()
循环中附加v-for
方法时,应将与其相关的数组条目作为参数传递。调用此方法时,应设置要编辑的ID,加载现有注释(如果存在)并打开模式对话框以编辑注释。
<script>
export default{
//...
methods: {
editComment(userDetails) {
this.textComment = userDetails.comment || ''; // load current comment
this.activeUserDetailsId = userDetails.id; // set ID being edited
$('#commentModal').modal('show'); // show modal dialog
},
saveComment() {
let id = this.activeUserDetailsId;
if (!id) {
alert('Failed to save comment - invalid state');
return;
}
db.collection("form")
.doc(this.activeUserDetailsId)
.update({
comment: this.textComment
})
.then(function() {
$('#commentModal').modal('hide');
console.log("Document successfully written!");
})
.catch(function(error) {
// TODO: Show error to user
console.error("Error writing document: ", error);
});
}
}
};
我已经将code you provided编辑,打样并重新制作为this updated file。它是徒手编写的,所以让我知道是否有任何错误。
更改摘要:
editComment(userDetails)
和saveComment()
事件处理程序formatTime
过滤器div
的不正确放置-不应该放在v-for
循环内