我遇到了从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方法,如果我可以找到一种方法,如果一个空白的话就不会有错误。
答案 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),