我正在使用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传递给它吗?
答案 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 不是全局的,它的范围仅限于它所使用的功能。如果您不使用任何函数,则此将引用全局对象。