我正在尝试将firebase数据库中的所有数据检索到typescript中的数组中。以下是相关的代码段:
export class ViewUserPage {
public list = [];
public ref = firebase.database().ref();
public usersRef = this.ref.child('users');
constructor(public navCtrl: NavController, public navParams: NavParams) {}
ionViewDidLoad(){
this.usersRef.orderByChild('tag').equalTo('staff').on('child_added',function(snap){
this.list.push(snap.val());console.log(snap.val());
});
}
}
我得到的错误是“无法读取属性'列表'的null”。我认为它发生在
this.usersRef.orderByChild('tag').equalTo('staff').on('child_added',function(snap){
this.list.push(snap.val());console.log(snap.val());
一部分。这是完整的错误:
ERROR TypeError: Cannot read property 'list' of null
at main.js:59030
at main.js:30999
at fc (main.js:30861)
at bf (main.js:30926)
at cf (main.js:30925)
at Qg.g.Gb (main.js:31016)
at Ag.g.wd (main.js:30980)
at og.wd (main.js:30970)
at Yf.Xf (main.js:30968)
at ag (main.js:30952)
defaultErrorLogger @ main.js:1436
如何解决这个问题?请帮忙!
答案 0 :(得分:1)
您正在使用function
关键字创建新范围并更改this
的值,您应该使用胖箭头功能而不改变this
的值,但根据您的评论firebase
似乎绑定了this
的另一个值,因此您需要将this
的值存储在另一个变量中,如下所示:
let that = this;
this.usersRef.orderByChild('tag').equalTo('staff').on('child_added', (snap) => {
that.list.push(snap.val());
console.log(snap.val());
});