В столбце 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'));
};
Это массив, который возвращается
Это моя структура данных
Я получаю массив, полный ссылок, но без данных, с которыми я могу с пользой работать. Правильно ли я делаю это, или я должен просто назначить идентификатор класса переменной в таблице студентов и фильтровать этот столбец?
Прежде всего, я самый настоящий. Нет, но здесь есть несколько недостатков.
Прежде всего, вы должны прочитать этот журнал изменений для 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';
});
});