Я создаю форум и имею такой макет, как на моей Firebase:
root
|-posts
|-postID1
|-creator: "userOne"
|-creatorUID: "simplelogin:1"
|-text: "Some Text"
|-postID2
|-creator: "userTwo"
|-creatorUID: "simplelogin:2"
|-text: "Some Other Text"
|-profile
|-simplelogin:1
|-firstName: "John"
|-user: "userOne"
|-simplelogin:2
|-firstName: "Sue"
|-user: "userTwo"
На моей странице форума. Я просто использую Angular ng-repeat
чтобы получить все сообщения в Firebase и перечислить их. Я также хочу напечатать первое имя того, кто создал этот пост, но прямо сейчас я могу получить доступ только к {{ post.creator }}
, который просто дает имя пользователя отправленного. Как связать создателя сообщения (или creatorUID) с полем имени этого профиля?
Если вы просто показываете имя пользователя firstName, я бы поместил имя пользователя в объект postIDX.
Это будет быстрее и меньше запросов к Firebase, если вы вернетесь назад и четвертый с каждым сообщением, чтобы получить имя usersFirst.
дополнительную информацию о структурировании данных и передовых методах можно найти здесь: https://www.firebase.com/docs/web/guide/structuring-data.html
Обновлено из ответа
если вы хотите получить информацию о пользователе, то в каждом запросе postIDx вам нужно будет сделать что-то похожее на это (не проверенный и быстрый макет).
var fbRef = new Firebase('firebase path'),
postDetailsObject = {};
fbRef.child('posts').once('value', function(snapshot) {
// loop through each post
snapshot.forEach(function(childSnapshot){
var postDetails = childSnapshot.val(),
profileDetails;
postDetailsObject.post = postDetails;
fbRef.child('profile/' + postDetails.creatorUID).once('value', function(profileData) {
postDetailsObject.profile = profileData;
});
})
});
Затем возвращайте объект postDetailsObject в угловой, чтобы вы могли прокручивать один объект.