在Denormalizing Data帖子中,可以通过在父记录中输入id并使用以下代码查询来创建子记录:
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'));
};
这是返回的数组
这是我的数据结构
我得到一个充满引用的数组,但没有数据我可以使用。我是以正确的方式做到这一点,还是应该将教室ID分配给学生表中的变量并按该列过滤?
答案 0 :(得分:0)
首先,我是第一件事。不,但这里有一些缺陷。
首先,您应该阅读AngularFire的this changelog。您会发现$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';
});
});