AngularFire, получить доступ к глубоким дочерним ссылкам?

Используя последний Angular с Firebase, я пытаюсь получить доступ к несколько глубоко вложенным элементам от вошедших в систему пользователей.

Структура выглядит примерно так: firebase -> пользователи -> user-uid -> электронная почта/имя/пароль/списки/ (где списки) -> list-uid -> идентификатор элемента -> имя элемента.

Я хочу получить доступ к этому дочернему элементу фамилии (предпочтительно через ng-repeat, поскольку они являются элементами списка, и я хочу, чтобы они отображались на панели инструментов каждого пользователя).

Я пробовал разные методы, но самый близкий из них:

$scope.user = $firebaseObject(ref.child('users').child(authData.uid));

И затем в моем html (пока):

<span>{{user.lists}}</span>

Что выводит что-то вроде: {"-uid":{"age":"21", "name":"martin"},{"-uid":{"age":"25", "name":" джон"}}} и т. д. и т. д. и т. д.

Рефери отправляется:

        var ref = new Firebase('https://url.firebaseio.com');

Есть идеи? Спасибо!

Изменить: я попытался добавить ng-repeat следующим образом:

<li ng-repeat="list in user.lists">{{list.name}}</li>

Что несколько работает, оно показывает мне объекты, которые я поместил, которые являются статическими, но не те, которые «на один уровень глубже»...

Редактировать 2: обновлено с помощью .json для структуры. Я могу получить «я» из имени, но не «мьёлк», которые на уровень глубже:

"users" : {
"8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
  "email" : "[email protected]",
  "lists" : {
    "-KDjNYC8GS2QFHYyp74L" : {
      "age" : "other",
      "name" : "me"
    },
    "8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
      "-KDjN_NkTQmj_1R00xZL" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "mjölk"
      },
      "-KDjN_r0WmT6xiZwadO5" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "ägg"
      },
      "-KDjNagkBWmJRj6oQqc2" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "rejv"
      },
      "-KDjNb5Fpak_9A_rvn8W" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "kossor"
      },
      "-KDjOVtAFJoYVNUkapNC" : {
        "done" : false,
        "id" : 1458936351305,
        "name" : "piss"
      },
      "-KDjOlemXR2eOoqPBh0v" : {
        "done" : false,
        "id" : 1458936677873,
        "name" : "mjölk igen"
      }
    }
  },

person mtorn    schedule 25.03.2016    source источник
comment
Вместо описания вашей структуры данных включите в свой вопрос фрагмент фактического дерева JSON (в виде текста, а не снимка экрана). Вы можете легко получить это, нажав кнопку «Экспорт» в базе данных Firebase.   -  person Frank van Puffelen    schedule 26.03.2016
comment
Хотя по описанию похоже, что вы вкладываете списки. Существует множество причин, по которым документация Firebase рекомендует вкладывать данные экономно и это один из них.   -  person Frank van Puffelen    schedule 26.03.2016
comment
Я прочитал его несколько раз, но я не уверен, как мне построить структуру по-другому. Я хочу, чтобы зарегистрированные пользователи могли создавать свои собственные списки, показывая только те, которые они создали сами (через свой uid). Возможно, все остальные uid избыточны, но я не могу от них избавиться. Я хотел бы иметь uid ТОЛЬКО для пользователя и списка, а не для каждого элемента. Я немедленно обновлю основной пост с .json!   -  person mtorn    schedule 26.03.2016
comment
@FrankvanPuffelen Обновлен основной пост с .json   -  person mtorn    schedule 26.03.2016


Ответы (1)


Как я уже сказал в своем комментарии: часть вашей проблемы вызвана тем, что вы вкладываете списки. Существует множество причин, по которым документация Firebase рекомендует экономно размещать данные. и это один из них.

Чтобы разложить данные, вы храните профили пользователей отдельно от списков для каждого пользователя:

"users" : {
  "8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
    "email" : "[email protected]",
  }
},
"user_lists" : {
  "-KDjNYC8GS2QFHYyp74L" : {
    "age" : "other",
    "name" : "me"
  },
  "8a6da12a-0992-43f5-bb33-95ddd49fed8c" : {
    "-KDjN_NkTQmj_1R00xZL" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "mjölk"
    },
    "-KDjN_r0WmT6xiZwadO5" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "ägg"
    },
    "-KDjNagkBWmJRj6oQqc2" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "rejv"
    },
    "-KDjNb5Fpak_9A_rvn8W" : {
      "done" : false,
      "id" : 1458936351305,
      "name" : "kossor"
    }
  }
}

Теперь, если вы хотите показать список профилей и списки для текущего пользователя, вы:

var ref = new Firebase('https://yours.firebaseio.com');
$scope.users = $firebaseArray(ref.child('users'));
$scope.lists = $firebaseArray(ref.child('user_lists').child(auth.uid));

И затем в вашем HTML:

<p>Users:</p>
<ul>
  <li ng-repeat="user in users">{{user.email}}</li>
</ul>

<p>Lists for you:</p>
<ul>
  <li ng-repeat="list in lists">{{list.name}}</li>
</ul>
person Frank van Puffelen    schedule 25.03.2016
comment
Спасибо! Спас мою ночь! :) - person mtorn; 26.03.2016
comment
Приятно слышать. А теперь иди и взламывай! Дайте мне знать, если удаление вложенности еще не ясно, потому что для создания вашего приложения крайне важно, чтобы вы поняли это правильно. - person Frank van Puffelen; 26.03.2016