Angular 4 firebase从数据库中读取一个值并将其传递给程序

时间:2017-08-02 17:56:04

标签: javascript angular typescript firebase firebase-realtime-database

我正在使用Angular 4和angularfire与Firebase数据库。我有以下Firebase数据库

"questions" : {
"tv" : {
  "got" : {
    "1" : {
      "answer1" : "Death",
      "choice11" : "Exile",
      "choice12" : "You lose a hand",
      "choice13" : "You lose the privilege to marry and father children",
      "description" : "",
      "q1title" : "What is the punishment for deserting the Night’s Watch?"
    },
    "questions" : {
      "number" : 1
    }
  }
}
}

我想阅读按钮上的问题编号并将其传递给我的程序,以便在函数等上使用它。我目前正在使用这部分代码来阅读它

constructor(public afAuth: AngularFireAuth, public af: AngularFireDatabase,public authService: AuthService,
              private router: Router) {
    var ref = firebase.database().ref("questions/tv/got/questions");
    ref.once("value")
      .then(function(snapshot) {
        let qnumber = snapshot.child("number").val(); 
        console.log(qnumber);
      });
  } 

一切正常,我可以在concole上看到qnumber(qnumber = 1)。但是我无法在程序中传递qnumber并将其用于我的其他功能 我试图声明第二个变量,并给它像这样的qnumber值

    qnumber2;
  constructor(public afAuth: AngularFireAuth, public af: AngularFireDatabase,public authService: AuthService,
              private router: Router) {
    var ref = firebase.database().ref("questions/tv/got/questions");
    ref.once("value")
      .then(function(snapshot) {
        let qnumber = snapshot.child("number").val(); 
        this.qnumber2 = qnumber;
        console.log(qnumber2);
      });

但是我在编译器上遇到错误。你能帮助我并告诉我一种方法将整个程序中的qnumber传递给它吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

qnumber2;constructor(public afAuth: AngularFireAuth, public af: AngularFireDatabase,public authService: AuthService,
          private router: Router) {
var ref = firebase.database().ref("questions/tv/got/questions");
ref.once("value")
  .then((snapshot) => {// ** My only change ** or use snapshot
    let qnumber = snapshot.child("number").val(); 
    this.qnumber2 = qnumber;
    console.log(qnumber2);
  });
  

this 关键字是指该函数所属的对象,或   如果函数属于无对象,则为window对象。在JavaScript中,函数是一个对象。   for more on this inside a function

在你的情况下, this.qnumber2 不是全局的,它的范围仅限于它所使用的功能。如果您不使用任何函数,则将引用全局对象。