使用firebase和vuejs我需要加载帖子。该帖子包含评论,这些评论是由用户(可由user_uid识别)做出的,我们需要知道昵称,存储在users /“user_uid”文件夹中。
我的firebase数据库结构如下所示:
posts
randompostid1
user_uid: postmaker,
content: "examples"
comments:
randomcommentid123
text: "Comment example"
user_uid: commenter
randomcommentid99
text: "another comment example"
user_uid: anothercommenter
users
commenter <-------------------- commenter userid
email: email@gmail.com
nickname: "Mr commenter"
postmaker<--------------------anotheruserid
email: email@gmail.com
nickname: "Mr post-maker"
anothercommenter <------------ another commenter userid
email: example@google.com
nickname: "another commenter"
要检索我们首先阅读帖子的所有帖子信息(例如randompostid1)。然后我们将有一个评论词典,其中包含我们需要检索昵称的user_uid。我使用for_loop循环遍历uid以获得足够的昵称。请参阅以下代码:
watch: {
comments: function(val){
if (val != ""){
for (let key in val){
db.ref("users/" + val[key].uid).once("value").then(function(snapshot){
val[key]["nickName"] = snapshot.val().nickname
})
}
}
}
}
然后我尝试在v-text元素中显示昵称。日志记录功能只记录“评论”的值。注意:“评论”作为道具传递。
<div class='comment' v-for='comment in comments'>
<div class='uid' v-text='comment.nickName'></div>
<div class='text' v-text='comment.text'></div>
<button @click='logging'>button</button>
</div>
nickName将在v-text中显示为undefined,但在“logging()”中,它将包含在注释的记录值中。为什么在v-text中未定义“nickName”,即使它是在记录“comments”时定义的? 非常感谢任何帮助。
编辑: 通过评论解决。 这条线
val[key]["nickName"] = snapshot.val().nickname
应替换为
this.$set(val[key], "nickName", snapshot.val().nickname)