如何解决''无法读取属性'属性名称'为null?

时间:2017-06-29 04:53:58

标签: angular typescript firebase ionic-framework firebase-realtime-database

我正在尝试将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 

如何解决这个问题?请帮忙!

1 个答案:

答案 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());
});