javascript - Vue 和 Firestore 数据绑定
问题描述
我想从 firestore 检索数据并将它们绑定到 vue 数据。
我在创建的生命周期钩子中以以下方式检索 firestore 数据:
created(){
console.log(firebase.auth().currentUser);
const docRef = firebase.firestore().collection("users").doc("VezLOaumLCza8jih8Ylk");
docRef.get().then(
function(doc){
if(doc.exists){
console.log(`Document data: ${doc.data()}`);
this.user = doc.data();
} else {
console.log(`Doc data is undefined`);
}
}).catch(function(err){
console.log(`Oops: ${err.message}`);
});
}
问题是它this
没有引用 vue 实例,实际上this
在我试图设置用户变量的时候是未定义的。如何将用户数据绑定到 vue 数据?似乎我错过了一些东西,我无法弄清楚可能是什么问题。
最终目标是拥有一个允许用户修改他/她的数据的表单。
(打印出 doc.data() 给出了预期的结果)
解决方案
then
回调是一个单独的函数,因此在该this
函数内部访问时,它是在引用then
回调。您需要在then
回调之前创建对 Vue VM 的引用。
尝试这个:
created(){
console.log(firebase.auth().currentUser);
const docRef = firebase.firestore().collection("users").doc("VezLOaumLCza8jih8Ylk");
var vm = this; //creating the reference to the Vue VM.
docRef.get().then(
function(doc){
if(doc.exists){
console.log(`Document data: ${doc.data()}`);
vm.user = doc.data();
} else {
console.log(`Doc data is undefined`);
}
}).catch(function(err){
console.log(`Oops: ${err.message}`);
});
}
推荐阅读
- jasmine - Jasmine:优先测试文件执行顺序
- wicket - Wicket LambdaModel 和 NumberTextField 无法解析类型
- bootstrap-4 - 在 Symfony 4 中使用带有 Webpack Encore 的引导程序
- visual-studio-code - 使用“react-app”在 Visual Studio Code 中显示创建反应应用程序的 lint 错误
- audio - WAV 到 AIF 转换 - 录制的 AIF 之间的差异
- javascript - 从按钮属性中选择自定义标签
- c# - 'Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection
- ios - 视图和超级视图自动布局的比例高度
- ruby - 将内容列出到 Ruby 变量中
- git - 带有 git 标头的 CLOC diff(代码行数)