firebase数据库子引用问题

时间:2016-10-01 19:12:58

标签: angularjs firebase firebase-realtime-database firebase-authentication angularfire

我正在尝试在我的父users

中创建会议firebase引用

我正在实施这一行:

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

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

但每次创建会议时,都会创建undefined usersmyApp.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值的来源。它来自我创建的服务,{{1}}是当前经过身份验证的用户的哈希值。

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

附图:

电流:

enter image description here

必需:

enter image description here

2 个答案:

答案 0 :(得分:1)

Aakash,

您创建meetings文件夹的代码和您添加到帖子中的图片不能一起使用。目前,您正在使用此:

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

但是如果你真的希望meetings成为users的直接子项,那么你将需要删除引用的用户id片段,如下所示:

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

这取决于您添加到帖子中的内容,但有些事情告诉我,您并不打算在其中绘制meetings作为用户的直接子项。如果那是你真正想要的,那就是你的答案。

下一篇文章是一个猜测,但是你想要创建的是以下结构吗?

enter image description here

因为如果是,你需要一些我也可以帮助的东西,请告诉我。

<强>更新

好的,根据您的评论,我发现您要在我的图片中找到数据结构。

看起来您的代码还可以,但是,在设置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对象。

答案 1 :(得分:0)

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

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

它对我有用。