打电话给这个'功能

时间:2017-07-20 20:00:13

标签: javascript firebase firebase-realtime-database vue.js vue-component

所以我正在创建一个Vuejs应用程序,我正在尝试在组件安装上获取firebase数据。这是有效的,但我尝试将值写入vuejs数据属性。为此,我只会在firebase函数中调用this.property = snapshot.val();(请参阅下面的代码),但这不起作用:this is undefined

所以我的代码就是:

export default {
  data() {
    return {
      imageList: "No images!"
    }
  },
  mounted() {
    if (!firebase.apps.length) {
      // Initialize Firebase
      var config = {
        ...
      };

      firebase.initializeApp(config);

      var database = firebase.database();
      var ref = database.ref("images").orderByChild("date");


    firebase.database().ref("images/").once('value').then(function(snapshot) {
        this.imageList= snapshot.val();
      });
    }
  }
}

我尝试在函数外部使用变量调用this.imageList= snapshot.val();来存储值,并且'这个'还没有被定义,但数据不存在,因为请求还没有完成。

所以基本上我想得到snapshot.val();进入this.imageList!

提前致谢。

3 个答案:

答案 0 :(得分:8)

您可以使用es6箭头函数语法来解决问题。

firebase.database().ref("images/").once('value').then((snapshot) => {
    this.imageList= snapshot.val();
});

或将其绑定到函数的上下文。

var that = this;

答案 1 :(得分:3)

使用箭头功能,闭包或bind

firebase.database().ref("images/").once('value').then(snapshot => {
  this.imageList= snapshot.val();
});

请参阅How to access the correct this inside a callback

答案 2 :(得分:0)

您也可以使用bind

firebase.database().ref('images/').once('value').then(function(snapshot) {
  this.imageList = snapshot.val()
}.bind(this))