Как запрашивать данные из ссылок в AngularFire

0

В столбце Denormalizing Data дочерние записи можно создать, введя идентификатор в родительскую запись и запросив их с помощью кода следующим образом:

ref.child('/users/{id}/')

Тем не менее, дочерний метод с тех пор устарел в AngularFire. Когда я создаю записи, имеющие родителя, я создаю дочернюю запись, а затем создаю ссылку в родительском элементе следующим образом:

var students = classesRef.child('classes').child(currentClass.$id).child('students');
students.child(studentRef.name()).set(true);

Когда я пытаюсь запросить эту запись, используя такую функцию:

var getStudentsForCurrentClass = function () {
    return $firebaseArray(classesRef.child('classes').child(currentClass.$id).child('students'));
};

Это массив, который возвращается

Изображение 174551

Это моя структура данных

Изображение 174551

Изображение 174551

Я получаю массив, полный ссылок, но без данных, с которыми я могу с пользой работать. Правильно ли я делаю это, или я должен просто назначить идентификатор класса переменной в таблице студентов и фильтровать этот столбец?

Теги:
firebase
angularfire

1 ответ

0

Прежде всего, я самый настоящий. Нет, но здесь есть несколько недостатков.

Прежде всего, вы должны прочитать этот журнал изменений для AngularFire. Вы увидите, что и $firebase и $asArray() были удалены. Это было заменено $firebaseObject и $firebaseArray.

Теперь для запроса данных гораздо проще просто сделать это, как и во всех моих проектах:

// Get the unique id for the user
var uid = $firebaseAuth(<your-firebase-ref>).$getAuth().uid;

// Specify the path we will be working with
var path = uid + '/programs';

// Get all programs, specified the '/' individually
// to remind you to use it after your reference
var programs = $firebaseArray(<your-firebase-ref> + '/' + path);

// After the programs are done loaded, bind them to the scope
// or if this fails for any reason, set an error message to show the user
programs.$loaded()
  .then(function(data) {
    $scope.programs = data;
  })
  .catch(function(err) {
    $scope.error = 'There was an error with the request';
});

Еще одна полезная функция здесь - следить за изменениями в местоположении для программ, поэтому, если что-либо изменится в базе данных, оно также обновит представление:

programs.$watch(function(event) {

  // Fetch the programs again
  programs = $firebaseArray(<your-firebase-ref> + '/' + path);

  programs.$loaded()
    .then(function(data) {
      $scope.programs = data;
    })
    .catch(function(err) {
      $scope.error = 'There was an error with the request';
  });
});
  • 0
    Это обновляет мой код до последней версии, но я все еще получаю массив ссылок, а не фактические записи.
  • 0
    Вы можете опубликовать обновленный код? :)
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню