2016-07-18 134 views
1

我有一個相當簡單的json結構的組和人員,我努力從firebase獲取/讀取每個人的組名列表。這是我試過的。我花了幾天調試失敗。非常感謝。Firebase角度多對多關係查詢

JSON:

{ 
"groups" : { 
"one" : { 
    "members" : { 
    "-KLxjv9OnQB2l5Ohr-7I" : true 
    }, 
    "name" : "group alpha" 
}, 
"two" : { 
    "members" : { 
    "-KM4oXjftRZZ5DXYt4B2" : true 
    }, 
    "name" : "group beta" 
}, 
"three" : { 
    "members" : { 
    "-KM4oXjftRZZ5DXYt4B2" : true 
    }, 
    "name" : "group gamma" 
} 
}, 
"persons" : { 
"-KLxjv9OnQB2l5Ohr-7I" : { 
    "groups" : { 
    "one" : true 
    }, 
    "personName" : "name1", 
    "personTitle" : "title1" 
}, 
"-KM4oXjftRZZ5DXYt4B2" : { 
    "groups" : { 
    "two" : true 
    }, 
    "personName" : "name2", 
    "personTitle" : "title2" 
    } 
} 
} 

APP.JS:

$scope.personsGroup = function(personObj){ 
var baseRef = new Firebase("https://un-cms-13264.firebaseio.com/"); 
var personsRef = baseRef.child('persons'); 
var groupsRef = baseRef.child('groups'); 
var res=[]; 
    for(var i=0;i<Object.keys(personObj.groups).length;i++){ 
    var groupKey=Object.keys(personObj.groups)[i] 
    res.push($firebaseArray(groupsRef.child(groupKey))); 
    }; 
    return res; 

} 

HTML:

<div class="row" ng-repeat="person in persons"> 

<div class="col-lg-3"></div> 
<div class="col-lg-3">{{person.personName}}</div> 
<div class="col-lg-3"></div> 
<div class="col-lg-3 groupsList"> 
<ul><li ng-repeat="group in personsGroup(person)">{{group.name}}</li></ul> 
</div> 

</div> 
+0

所以你試圖返回一個人在組中的名稱? – theblindprophet

+0

你有什麼問題?另外:如果你可以在jsfiddle/jsbin中重現問題,人們可以使用它來看看事情是如何工作的(可能爲什麼不行)。你會發現你獲得更多的幫助。 –

+0

是@theblindprophet這正是我的問題。我得到空白條目,我沒有得到組的名稱。 –

回答

1

,最好的辦法是附加$firebaseArray$scope變量:

var ref = new Firebase("https://un-cms-13264.firebaseio.com/").child("persons").child(some-person).child("groups"); 
$scope.personsGroup = $firebaseArray(ref); 

// When loaded 
$scope.personsGroup.$loaded(function(data) { 
    // can do something 
}, function(error) { 
    // error 
}); 

您如何確定some-person取決於您。您可以查詢persons樹並存儲所有人或將其存儲在數組或對象中。

<ul> 
    <li ng-repeat="(key, value) in personsGroup">{{ key }}</li> 
</ul> 

我不會建議personGroup(person)因爲$firebaseArray是一個異步調用,我覺得這可能是真正的跳躍。做個聰明有了它,你也可以只讓整個persons樹一個電話,如果你想:

var ref = new Firebase("https://un-cms-13264.firebaseio.com/").child("persons"); 
$scope.persons = $firebaseArray(ref); 

,做的一些迭代。

+0

所以現在我得到了來自person實體的組密鑰(「one」,「two」等),但是如何將它與group實體中的group.name綁定(「group alpha」,「group beta」等) ? –

+0

引用它:'ref = new Firebase(「https://un-cms-13264.firebaseio.com/」).child(「groups」).child(the-group);'然後使用可以訪問'name' – theblindprophet

+0

或者你可以只存儲組名,以'persons'開始而不是'one','two'等 – theblindprophet