2015-01-28 4 views
0

배열 객체 "사용자"이 있으며이 사용자의 모든 프로필 정보 (예 : 이름 및 전자 메일)는 user.uid과 함께 저장됩니다.AngularJS의 Firebase에서 관련 데이터를 어떻게로드합니까?

또 다른 객체 "friends"은 user.uid 각각에 대해 사용자가 친구이지만 friend.uid 만 저장합니다.

이제 user.uid의 모든 친구를 검색 할 때이 친구의 프로필을 디스플레이에 연결하고 싶습니다. 이것은 분명히 비동기 로딩에 문제를 일으킬 것입니다.

저는 Firebase를 사용하고 있습니다. 누군가가 해결 방법에 대한 예제를 줄 수 있다면 좋겠어요.

나는 다음을 시도하지만 (작동하지 않습니다는 길이가 있음을 보여줍니다 0 $는 목록에있는 모든 사용자를로드에도 불구하고) (로드 후 :

컨트롤러

FriendsService.getFriends(user.uid).$loaded(
    function(Friends){ 

     $scope.Friends = Friends; 

     // Friends is here still undefined??? 

     angular.forEach(Friends, function(iterator){ 

     FriendsService.getUserData(iterator.friendID).$loaded(function(output){ 

      $scope.FriendsData.push(output) 

     }) 
     }) 
    }, 
    function(error){ 
     window.alert("Ooooops: " + error) 
    }) 

서비스

var getFriends = function(userID) { 

    return fbutil.syncObject("friendsofusers/" + userID + "/friends/") 

    // equivalent to: 
    // var ref = new Firebase("https://yourapp.firebaseio.com/friendsofusers/" + userID + "/friends/"); 
    // var sync = $firebase(ref) 
    // return sync.$asObject(); 

}; 

var getUserData = function(userID) { 

      return fbutil.syncObject("users/" + userID); 

     }; 
+1

이 코드는 문제를 확인하고 이해하기에 충분한 컨텍스트를 제공하지 않습니다. angularFire-seed, 버전 정보 없음, 친구 생성 방법에 대한 설명이 없습니다. 또한 [동기식으로 비동기식 목록을 읽으려고했습니다.] (http://stackoverflow.com/questions/27049342/impossible-to-access-array-with-angular-and-firebase). 또한 JavaScript 객체를 만들어 배열로 사용하려고했습니다. syncObject() 대신 syncArray()를 사용하고 (길이가 필요한 경우) [docs 읽기] (http://goo.gl/ouQm1j) [docs] (https://angularjs.org) [docs] (http : //goo.gl/J7Vym). – Kato

+0

안녕하세요 카토, 답장을 보내 주셔서 감사합니다. 내 질문을 업데이트하려고합니다. 비동기 목록을 동 기적으로 호출하는 실수를 어디에서 설명 할 수 있습니까? $ loaded() 뒤에 목록을 호출하기 때문에? – AMG

답변

0

그것은 당신의 QUES의 코드 때문에, 반드시 어렵다 부분적으로 불완전하다. 그러나 코드는 단순히 범위가 수정 된 AngularJS와 알리기 위해 필요로하는 상당히 가능성이 높습니다 :

FriendsService.getUserData(iterator.friendID).$loaded(function(output){ 
     $timeout(function() { 
      $scope.FriendsData.push(output) 
     } 
    }) 

당신은이에 대한 서비스로 $timeout를 주입해야합니다. 이 호출을 사용하면 AngularJS에 새로운 데이터가 있음을 알리고 뷰가 업데이트됩니다.

the relevant section of the AngularFire guide에 설명되어 있습니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 나는 그것을 시도했지만 다시 개체의 세 가지 경우에도 첫 번째 항목 만 표시합니다. – AMG

관련 문제