2015-01-07 25 views
0

我試圖引用使用Firebase的工廠返回的對象中的子數據,但我很難過。我可以成功獲取我想要的用戶對象($scope.user),但似乎無法引用其中的數據(例如$scope.user.name) - 所有內容都返回未定義狀態。AngularJs中的對象內引用數據

app.factory('Data', ['$firebase', function(){ 
    var ref = new Firebase('https://something.firebaseio.com/users'); 
    return { 
     refUser: function(id){ 
      return $firebase(ref.child(id)).$asObject(); 
     } 
    } 
}]); 

app.controller('MainCtrl', ['Data', function(Data){ 
    $scope.user = Data.refUser(123); // 123 = user ID 
    console.log($scope.user); // Returns user object successfully (containing 'name' key) 
    console.log($scope.user.name); // Return undefined 
}]); 

什麼是我失蹤?我不太確定問題的根源在於我的理解:Angular,Firebase還是簡單的JavaScript。

+0

也許你的user.name === undefined? – alexpods

+2

'$ asObject'返回一個promise,它在將來的某個時刻將包含用戶的屬性。我會寫一個簡短的答案(對類似問題有很多參考)。沒關係,看起來馬修伯格只是打敗了我。 :-) –

+0

請參閱http://stackoverflow.com/questions/27049342/asynchronous-access-to-an-array-in-firebase/27050749#27050749和http://stackoverflow.com/questions/26604472/firebase-angularfire -child-asobject-give-properties-undefined/26673597#26673597 –

回答

3

這是因爲refUser仍在撥打電話,它還沒有完成。 $ scope.user的引用存在,因爲它已經被創建。如果您將console.log更改爲console.log(JSON.stringify($ scope.user));你會發現它實際上是空的。 Chrome開發工具會保留通話完成後填充的參考。