Vuefire Firebase更新问题

时间:2017-04-14 17:37:55

标签: firebase firebase-realtime-database vue.js vuejs2 vuefire

我遇到了从VueFire更新Firebase的问题。我试图使用以下方法,但如果我将任何字段留空(这应该经常在设置中发生),它会对我大喊大叫。如果.update带有空白字段,为什么会发生这种情况?

  

错误:未捕获错误:Firebase.update失败:第一个参数在属性“enterprises.somebusiness.video”中包含未定义

updatePost(post) {
        postsRef.child(post['.key']).update({
          name: post.name,
          video: post.video,
          story: post.story,
          cover: post.cover,
          card: post.card
        })
      },

有一次,我重写了以上内容:

updatePost: function (post) {
        const businesschildKey = post['.key'];
        delete post['.key'];
        /* Set the updated post value */
        this.$firebaseRefs.posts.child(businesschildKey).set(post)
      },

它的效果令人惊讶,但删除密钥似乎会导致Vue中出现奇怪的排序问题。我宁愿坚持使用top方法,如果我可以找到一种方法,如果一个空白的话就不会有错误。

1 个答案:

答案 0 :(得分:2)

根据this post

  

将对象传递给Firebase时,属性的值可以   是一个值或null(在这种情况下,属性将被删除)。他们   不能undefined,这是你根据的传递   错误。

您的错误消息表明post.video的值为undefined。您可以使用逻辑 - 或提供类似的后备值:

  video: post.video || null,

这意味着只要post.video具有false-y值,表达式就会计算为null。但是,这可能会捕获空字符串或数字0。更准确地说,你应该使用

  video: typeof post.video === 'undefined' ? null : post.video,

如果您需要检查多个值,可以为它编写一个函数:

function nullIfUndefined(value) {
  return typeof value === 'undefined' ? null : value;
}

那么你的表达就是

  video: nullIfUndefined(post.video),