添加新的firebase值后,V-text不会更新

时间:2018-02-13 12:00:33

标签: javascript firebase firebase-realtime-database vue.js

使用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)

0 个答案:

没有答案