Javascript &引用;ref.child不是一个函数;添加.orderByChild.StartAt筛选器时

Javascript &引用;ref.child不是一个函数;添加.orderByChild.StartAt筛选器时,javascript,angularjs,angularfire,firebase-realtime-database,Javascript,Angularjs,Angularfire,Firebase Realtime Database,我的控制器中有以下代码,用于转到firebase数据库节点,循环遍历该节点上的记录,并将每个状态类型的计数返回到数组中(作为chartjs图表的数据)。代码还等待更改(编辑和删除)并相应地更新数组。这一切都是我想要的 var ref = new Firebase("https://my-firebase-url/") ref.on('child_added', function (snapshot) { var status = snapshot.val().status.Status;

我的控制器中有以下代码,用于转到firebase数据库节点,循环遍历该节点上的记录,并将每个状态类型的计数返回到数组中(作为chartjs图表的数据)。代码还等待更改(编辑和删除)并相应地更新数组。这一切都是我想要的

var ref = new Firebase("https://my-firebase-url/")
ref.on('child_added', function (snapshot) {
    var status = snapshot.val().status.Status;
    updateStatusCount(status, addStatus);

    ref.child(snapshot.key()).on('child_changed', function (chsnap) {
        if (chsnap.key() == 'status') {
            var chstatus = chsnap.val().Status;
            updateStatusCount(status, removeStatus);
            updateStatusCount(chstatus, addStatus);
            status = chstatus;
        }
    });
    ref.child(snapshot.key()).on('child_removed', function (rmsnap) {
        if (rmsnap.key() == 'status') {
            updateStatusCount(status, removeStatus);
        }
    });

});

function addStatus(index) {
    $scope.data[0][index] = $scope.data[0][index] + 1;
}

function removeStatus(index) {
    $scope.data[0][index] = $scope.data[0][index] - 1;
}

function updateStatusCount(status, cb) {
    switch (status) {
        case 'Status 1':
            cb(0);
            // $scope.data[0][0] = $scope.data[0][0] + 1 
            break;
        case 'Status 2':
            cb(1);
            // $scope.data[0][1] = $scope.data[0][1] + 1 
            break;
        case 'Status 3':
            cb(2);
            // $scope.data[0][2] = $scope.data[0][2] + 1 
            break;
        case 'Status 4':
            cb(3);
            // $scope.data[0][3] = $scope.data[0][3] + 1 
            break;
        case 'Status 5':
            cb(4);
            // $scope.data[0][4] = $scope.data[0][4] + 1 
            break;
        default:
            break;
    }
}

});
如果我修改firebase引用以包括.orderByChild和.startAt以过滤返回的数据

       var ref = new Firebase("https://my-firebase-url/")
           .orderByChild("location").startAt(London)  
我在控制台中收到以下警告

FIREBASE警告:用户回调引发异常。TypeError:ref.child不是函数


而且更改(编辑和删除)不再更新,我必须手动刷新页面才能显示正确的数字。我真的很难弄清楚为什么在添加过滤器时会发生这种情况。

Firebase查询类没有
子()方法,因为。。。查询的子项是什么

解决语法错误的一种方法是将ref和查询拆分为两个变量:

var ref = new Firebase("https://my-firebase-url/");
var query = ref.orderByChild("location").startAt(London);
query.on('child_added', function (snapshot) {
   ...

谢谢你,弗兰克,没有疑问的孩子这回事是有道理的。我已经将我的ref和query拆分为两个变量,但是我得到了与“query.child不是函数”警告相同的错误。在使用新的查询变量时,我是否仍在尝试使用child()方法?好的,周一早上很慢。现在所有的工作都是基于你的答案。谢谢