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.$id
是 undefined
。这可能是由于 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');
它对我有用。
我正在尝试在我的 parent users
我正在执行这一行:
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.$id
是 undefined
。这可能是由于 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');
它对我有用。