在 Firebase 的 angularFire 数组中获取嵌套对象长度

get nested object length in an angularFire array in Firebase

我有一个这样的 Firebase 结构:

user {
  uid {
    Lessons {
      lid1 {
         Title: ...
          }
      lid2 {
         Title: ...
          }
     }
   }
  }

我想使用 AngularFire 将用户转换为数组,这样我就可以像这样使用 Angular 过滤它们:

var usersRef = new Firebase($rootScope.baseUrl + "users"); 
var userListfb = $firebase(usersRef).$asArray();

问题是,我还需要 Lessons 对象的子对象的数量。当我登录 userListfb 时,它是一个数组。但在数组内部,Lessons 节点仍然是一个对象。我不能使用 length 来获取它的长度。使用 Firebase AngularFire 找出课程节点的子节点数量的正确方法是什么?

编辑 1 根据 Frank 的解决方案,我得到了一个无限循环(digest circle error from AngularJS)。 问题是,我不知道 "uid" 键。我需要在第一个数组中循环它以将 uid 放入第二个 firebaseArray。 假设我在视图中有一个 ng-repeat="user in users" 并在每次重复中在视图级别调用它:

{{getLessonLength(user.uid)}}

然后在控制器中,我有这个功能:

$scope.users = $firebaseArray($scope.usersRef);

$scope.getLessonLength = function (uid) {

        var userRef = $rootScope.baseUrl + "users/" + uid + "/lessons/";

        var lessonsNode = $firebaseArray(new Firebase(userRef));

        return lessonsNode.length;
    }
}

它抛出这个错误:错误:[$rootScope:infdig] 10 $digest() iterations reached。中止! 观察者在最后 5 次迭代中解雇:[]

我想要的只是常规 Firebase 中的 var lessonsCount = snapshot.child('lessons').numChildren() .on('child_added' ...), numChildren( ) FirebaseArray 中的函数。请帮忙!

AngularFire 包含相当多的代码来确保 Firebase 中的 有序集合 正确映射到 JavaScript 数组,如 Angular (和你)期待它。

如果您有对特定用户的引用,您只需创建一个新同步 ($firebase) 并在其上调用 $asArray

var usersRef = new Firebase($rootScope.baseUrl + "users"); 
var userListfb = $firebase(usersRef).$asArray();
var uid1LessonsRef = userRef.child('uid1').child('Lessons');
var uid1LessonsArray = $firebase(uid1LessonsRef).$asArray();
uid1LessonsArray.$loaded().then(function(arr) {
    console.log('Loaded lessons, count: '+arr.length);
});

无论您创建了多少引用,数据都只会同步一次。