2017-09-26 75 views
0

Firebase新手在這裏。

在我的控制器我有一個叫currentChallenge變量,它包含以下$ firebaseObject:

$$conf: {sync: {…}, ref: X, binding: f, listeners: Array(0)} 
$id: "gRH2EWGQB6dbejKYap40Z0ea0nz2" 
$priority: null 
-Kuy9HAfvVIhPhtQraLy: 
    challenge: {...} 
    challenger: "gRH2EWGQB6dbejKYap40Z0ea0nz2" 
    pending: true 
    timestamp: 1506428920780 
    __proto__: Object 
__proto__: Object 

在火力地堡,它看起來像: enter image description here

從我的控制器代碼如下:

Challenge.lastChallenge(uid, challengeUserId).$loaded() 
    .then(function (currentChallenge) { 
    if (currentChallenge.challenger == uid) { 
     // stuff happens 
    } 

這就是所謂的挑戰服務方法:

lastChallenge: function (uid1, uid2) { 
    var path = uid1 < uid2 ? uid1 + '/' + uid2 : uid2 + '/' + uid1; 
    return $firebaseObject(userChallengeRef 
    .child(path) 
    .orderByChild('timestamp') 
    .limitToLast(1)); 
}, 

我試圖訪問數據爲challenger,但是我不確定如何做到這一點的$value似乎並不在對象上工作。

我不能把-Kuy9HAfvVIhPhtQraLy,因爲這取決於我看到的挑戰而改變。它也並不總是與$id相同的價值。

回答

2

你執行一個查詢打擊火力地堡:

userChallengeRef 
    .child(path) 
    .orderByChild('timestamp') 
    .limitToLast(1)) 

當您執行對火力地堡數據庫的查詢,也將有可能是多個結果。所以快照包含了這些結果的列表。即使只有一個結果,快照也會包含一個結果列表。

這意味着您需要使用$firebaseArray來獲取結果並對其進行迭代。當使用常規的JavaScript SDK,它會是這樣的:

lastChallenge: function (uid1, uid2) { 
    var path = uid1 < uid2 ? uid1 + '/' + uid2 : uid2 + '/' + uid1; 
    return new Promise(function(resolve, reject) { 
    userChallengeRef 
     .child(path) 
     .orderByChild('timestamp') 
     .limitToLast(1)) 
     .once("value").then(function(snapshot) { 
     snapshot.forEach(function(child) { 
      resolve($firebaseObject(child.ref)); 
     }); 
     }); 
} 

調用它爲:

Challenge.lastChallenge(uid, challengeUserId).then(function(firebaseObject){ 
    firebaseObject.$loaded().then(function (currentChallenge) { 
    if (currentChallenge.challenger == uid) { 
     // stuff happens 
    } 

請注意,我不使用AngularFire可以幫助你在所有想到這裏。您應該只將AngularFire服務用於直接綁定到您的Angular UI的事物。對於所有其他操作,請直接使用Firebase JavaScript SDK。它使您的代碼更簡單,並且更容易推斷出您的應用程序的邏輯與其UI。

+0

好吧,我該如何將此添加到currentChallenge變量?在添加這個之後,我得到了一個承諾,而不是挑戰數據。謝謝你,對不起,如果這個問題似乎愚蠢。 – helpmeplz

+0

添加了一個示例。 –