0

サービスを介してコントローラー内のユーザーデータにアクセスしようとしています。私はコントローラーでangularJSを使用してfirebaseオブジェクトから値を取得する

$scope.userData = UserService.getUserData(); 
console.log($scope.userData.$id) 

を使用しますが、そのような役割

$scope.userData = UserService.getUserData(); 
console.log($scope.userData.role) 
などの他のノードにアクセスしようとすることで、正常 $idにアクセスすることができ、コントローラからデータにアクセスする際にサービスが正しく

{ 
    "$id": "9ecadf8e-a233-48ac-bebf-26b50ea2855d", 
    "$priority": null, 
    "branch": "London", 
    "email": "[email protected]", 
    "firstName": "John", 
    "lastLogin": 1467975594697, 
    "lastLoginPrevious": 1467975348837, 
    "lastName": "Smith", 
    "role": "Manager" 
} 

オブジェクトを返します。

コンソールで「未定義」と表示されます。明らかにこれを正しくやっているわけではありませんが、私が次に試してみたいことに固執しています。ここで

は、あなたはおそらく、非同期の問題を持つことができfirebase

.service('UserService', ['$location', '$firebaseAuth','$firebaseObject', function ($location, $firebaseAuth, $firebaseObject) { 
var userData = ''; 
var ref = new Firebase("https://firebase-url"); 
var authData = ref.getAuth(); 
var userUID = authData.uid; 
var userRef = new Firebase("https://firebase-url/Users/" + userUID); 
var userData1 = $firebaseObject(userRef); 


return { 

    getUserData: function() { 
     if (userData == '') { 
      userData = userData1; 
     } 
     return userData; 
    }, 

}; 
+0

最初のチェック - はconsole.log($ scope.userData)。もしあなたがマネージャーとしての役割を見ることができれば、第2コンソールはそれを表示します。その変数名も確認してください。 –

+0

JSONオブジェクトを取得するロケット科学はありません。オブジェクト全体を確実に見ることができれば、そのキーペアも見ることができます。私はまだそれがfirebaseとfirebaseデータベースをタグ付けした理由を理解できませんでした。 –

+0

@Sa E console.log($ scope.userData)は、問題の細かいjsonデータを返します。 – Janbango

答えて

1

からデータを取得し、私のサービスです。ここでは、コントローラ(Firebase 3.0)の私のコードの例です:

私がやっていること
// Gets reference to resources tree, SERVICE CALL 
$scope.resourceNames = submissions.getResourceNames(); 
// Could be previously loaded, check 
if(Object.keys($scope.resourceNames).length === 0 && $scope.resourceNames.constructor === Object) { 
    // Get reference 
    var resourceNameRef = firebase.database().ref("/resourceNames"); 
    firebase.database().goOnline(); 
    // Return JSON object of data at specified location 
    $scope.resourceNames = $firebaseObject(resourceNameRef); 
    // When resources loaded 
    $scope.resourceNames.$loaded().then(function(data) { 
     // Store into service, SERVICE CALL 
     submissions.setResourceNames(data); 
     // DO WHATEVER 
    }).catch(function(error) { 
     console.error("Error:", error); 
    }); 
} else { 
    // WAS ALREADY LOADED 
} 

は、データが既に(別のコントローラによって)ロードされている場合、それはwasnかどうかを確認するためにサービスをチェックしています私はデータを呼び出し、それがロードされるのを待ち、それを私のサービスの中に保存します。私は、コントローラ内またはビューに喜ばよう

私は、データを使用することができます。

<p> 
    {{resourceNames.$id}} 
</p> 
<p> 
    {{resourceNames.name}} 
</p> 
<!-- etc --> 
これと
関連する問題