开发者问题收集

Vue 和 firestore 数据绑定

2018-12-29
779

我想从 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() 可获得预期结果)

1个回答

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}`);
  });
}
Gabriel Garrett
2018-12-29