如何从AngularFire中的引用查询数据

时间:2015-07-06 20:16:54

标签: angularjs firebase angularfire

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'));
};

这是返回的数组

The array that gets returned

这是我的数据结构

enter image description here

enter image description here

我得到一个充满引用的数组,但没有数据我可以使用。我是以正确的方式做到这一点,还是应该将教室ID分配给学生表中的变量并按该列过滤?

1 个答案:

答案 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';
  });
});