2017-09-26 74 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

添加了一个示例。 –