firebase 数据库 child 参考问题

firebase database child reference issue

我正在尝试在我的 parent users

中创建会议 firebase 参考

我正在执行这一行:

var meetingRef= firebase.database().ref('users/' + $rootScope.currentUser.$id + '/meetings');

在我的 users 下,我将用户 Id's 注册为散列,我在上面的代码中使用了它。当当前用户通过身份验证时,他可以从 UI 创建一些会议。我希望这些会议进入他在 firebase 数据库中的特定哈希。

但每次我创建会议时,都会创建 users 的一些 undefined child 引用,在这些引用下我可以看到经过身份验证的用户的会议。

这是我的完整代码-

myApp.controller("MeetingsController",
    ['$scope','$rootScope','$firebaseArray',
    function($scope,$rootScope,$firebaseArray){

    var ref = firebase.database().ref();
     var auth = firebase.auth();

        auth.onAuthStateChanged(function(user) {
          if (user) {
            var meetingRef= firebase.database().ref('users/' + $rootScope.currentUser.$id + '/meetings');
            var meetingsInfo=$firebaseArray(data);

            $scope.addmeeting=function(){
                meetingsInfo.$add({
                    name:$scope.meetingname,
                    date:firebase.database.ServerValue.TIMESTAMP
                }).then(function(){
                    $scope.meetingname=' ';
                })
            };
          }
        });

}]);

如果您想知道 $rootScope.users.$id 值的来源。它来自我创建的服务,$id 是当前经过身份验证的用户的哈希值。

我希望会议进入经过身份验证的用户哈希。我想我正在创建错误的参考路径。我怎样才能做到这一点?

附加图片:

当前:

必填:

阿卡什

您创建 meetings 文件夹的代码与您添加到 post 的绘图不一致。目前,您正在使用:

var data = firebase.database().ref('users/' + $rootScope.currentUser.$id + '/meetings');

但是,如果您真的希望 meetings 成为 users 的直接子代,那么您将需要像这样删除引用的用户 ID 部分:

var data = firebase.database().ref('users/meetings');

这是基于您添加到 post 的内容,但是,有些东西告诉我您并不是要在其中绘制 meetings 作为用户的直接子项。如果那是您真正想要的,那么这就是您的答案。

下一段是猜测,但下面的结构是您要创建的吗?

因为如果是,您需要一些不同的东西,我也可以提供帮助,请告诉我。

更新:

好的,根据您的评论,我看到您正在使用我图片中的数据结构。

看起来您的代码没有问题,但是,在设置 data 变量的那一刻,您的 $rootScope.currentUser.$idundefined。这可能是由于 javascript 的异步性质。这意味着有时您的 user 变量是真实的,但是,您的 $rootScope.currentUser.$id 仍然没有完全赶上并且是 undefined.

我会 运行 在继续之前检查变量,以确保一切正常:

if($rootScope.currentUser.$id != undefined){
    var data = firebase.database().ref('users/' + $rootScope.currentUser.$id + '/meetings');
}else{
    return;
}

这将阻止您在数据库中获取新的 undefined 对象。

我找到了这个问题的答案。 我将 meetingRef 更改为:

var meetingRef = firebase.database().ref('users/' + user.uid + '/meetings');

它对我有用。