所以我正在创建一个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!
提前致谢。
答案 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();
});
答案 2 :(得分:0)
您也可以使用bind
。
firebase.database().ref('images/').once('value').then(function(snapshot) {
this.imageList = snapshot.val()
}.bind(this))