2017-03-08 145 views
1

我正在使用Firebase v3作为我的数据库的离子2应用程序;我的功能已经工作,但是当我尝试显示简单的警告,告诉用户什么是错了,它给了我这个错误:无法读取属性'alertCtrl'null

Cannot read property 'alertCtrl' of null 

这里是我的功能:

updateUniqueCode(uniqueCode: string): any { 

    this.userProfile.on("child_added", function(snapshot,prevChildKey){ 
     let allUniqueCodes = snapshot.val(); 

     if (allUniqueCodes.uniqueCode === uniqueCode){ 

     let alert = this.alertCtrl.create({ 
          message: "no", 
          buttons: [{ text: "Ok"} ] 
         }); 

         alert.present(); 



     } else { 

     let currentUser = firebase.auth().currentUser; 
     let userProfile = firebase.database().ref('/userProfile'); 

      return userProfile.child(currentUser.uid).update({ 
      uniqueCode:uniqueCode 
      }) 
     } 
    }); 
    } 

我已经尝试了很多不同的解决方案,但似乎没有任何提前工作:( 感谢

回答

1

既然你是一个函数内(此功能:function(snapshot,prevChildKey){ ... })!在this关键字对组件的引用了由乐队尝试。摹这样的:

updateUniqueCode(uniqueCode: string): any { 

    this.userProfile.on("child_added", (snapshot,prevChildKey) => { 
     let allUniqueCodes = snapshot.val(); 

     if (allUniqueCodes.uniqueCode === uniqueCode){ 

     let alert = this.alertCtrl.create({ 
          message: "no", 
          buttons: [{ text: "Ok"} ] 
         }); 

         alert.present(); 



     } else { 

     let currentUser = firebase.auth().currentUser; 
     let userProfile = firebase.database().ref('/userProfile'); 

      return userProfile.child(currentUser.uid).update({ 
      uniqueCode:uniqueCode 
      }) 
     } 
    }); 

} 

不同的是,现在你用箭头功能和...

An arrow function expression has a shorter syntax than a function expression and does not bind its own this, arguments, super, or new.target.

+1

Thankss!它现在的作品! :d –