【发布时间】:2019-08-24 10:38:55
【问题描述】:
我在 Vue 应用程序中使用 Firebase 进行身份验证和数据库。我正在开发的组件会监听特定用户的“朋友”集合中的变化。
我只想在实时反映数据库更改的同时显示朋友列表。
到目前为止,我采取了两种方法,都导致成功捕获更改的相同问题,但无法在 dom 中显示更改。
方法一
在 created() 函数中,我使用 .onSnapshot() 函数添加我的侦听器。这成功地捕获了数据库中的更改。但是,如果我将 this.friends 设置为更新后的值,屏幕不会改变。
方法2
使用 Vuex 加载好友列表。我为商店创建了一个监视功能,可以成功跟踪更改。但是在这个手表功能中更改this.friends也不会更新屏幕。
对简单变量的反应按预期工作。
<template>
<v-container fluid>
{{ friends }}
</v-container>
</template>
<script>
import db from '@/firebase/firestore'
import firebase from 'firebase'
export default {
name: 'Test',
data() {
return {
friends: []
}
},
created() {
let firebaseUser = firebase.auth().currentUser
let ref = db.collection('users')
ref.where('user_id', '==', firebaseUser.uid).limit(1).get()
.then( snapshot => {
if (snapshot.docs[0].data()) {
db.collection("users").doc(snapshot.docs[0].id)
.onSnapshot(function(doc) {
let user = doc.data()
console.log('friends', user.friends) // outputs correctly
this.friends = user.friends // does not update dom
})
}
})
},
}
</script>
【问题讨论】:
标签: javascript firebase vue.js google-cloud-firestore