2017-03-08 132 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 –