无法与 Firebase 同步访问数组
Can't access array in sync with Firebase
我正在开发 Ionic 应用程序。它基本上是一个测验,用户可以在其中发布一些问题的答案。
这是我的数据库结构
user{
userID (autogenerated by Firebase){
name:
surname:
questionsAnswered:
answers{
userID (linked with users){
question1answer:
question2answer:
...
如您所见,没有答案 ID。我这样做是因为我认为我不需要一个。 如有错误请指正
我的用户数据与 Firebase 同步,但我无法从答案部分检索数据。
这是控制器的一些代码。
.controller('ConcursoCtrl', function($scope, controlDatos, $firebaseArray, $cordovaCamera)
$scope.myAnswers = {};
var uid = "-K5omNwU5rpo1Z4WvpnQ"; //This is just for test purposes
var myAnswersRef = new Firebase('https://url.firebaseio.com/answers/'+ uid);
$scope.myAnswers = $firebaseArray(myAnswersRef);
console.log('Answer 1', $scope.myAnswers.question1answer);
console.log($scope.myAnswers);
第一个控制台日志没有return任何东西。第二个日志 returns 与数据库中的答案一样多的对象(已检查),所以我知道我可以很好地访问它,但我无法获得不同答案的值。
[object Object],[object Object],[object Object],[object Object]
¿我是否尝试使用 $scope.myAnswers.question1answer 错误地访问数据?
As you see, there is no answer ID. I did it like this because i
thought i didnt need one. Please correct me if im wrong
你确实有一个 answer_id
。
构建数据时,请结合安全规则考虑它们。
{
"answers": {
"$uid": {
"$answer_id": {
}
}
}
}
这形成了 answers/$uid/$answer_id
的路径,因此 $uid
位置下的每个键都是 $answer_id
。
现在,进入显示问题。
The first console log doesn't return anything.
您正在处理异步数据,因此在 console.log()
运行时尚未下载。这没关系,因为 AngularFire 会在数据下载后触发 Angular 的 $digest
循环。
所以您需要做的就是将 answers
附加到范围。
// create a root ref
var ref = new Firebase('<my-firebase-app>');
// create a ref to the user's answers using .getAuth() and the uid
var myAnswersRef = root.child('answers').child(root.getAuth().uid);
// assign answers to $scope
$scope.answers = $firebaseArray(myAnswersRef);
现在您应该可以通过简单的 ng-repeat
:
在模板中使用它
<ul ng-repeat="answer in answers">
<li> {{ answer.text }} </li>
</ul>
我会回答我自己的问题,以防有人犯同样的错误。
基本上,我试图用 $firebaseArray 检索单个对象,用于检索对象数组。
使用 $firebaseArray 和 /root/answers 路径 我可以检索 用户回答的所有问题。 这可能太数据密集型,因为强制所有用户下载所有数据(有图片存储在 firebase 中)。
相反,我只是使用 $firebaseObject 来 下载我需要的单个对象 。
希望这对某人有所帮助。
我正在开发 Ionic 应用程序。它基本上是一个测验,用户可以在其中发布一些问题的答案。
这是我的数据库结构
user{
userID (autogenerated by Firebase){
name:
surname:
questionsAnswered:
answers{
userID (linked with users){
question1answer:
question2answer:
...
如您所见,没有答案 ID。我这样做是因为我认为我不需要一个。 如有错误请指正
我的用户数据与 Firebase 同步,但我无法从答案部分检索数据。
这是控制器的一些代码。
.controller('ConcursoCtrl', function($scope, controlDatos, $firebaseArray, $cordovaCamera)
$scope.myAnswers = {};
var uid = "-K5omNwU5rpo1Z4WvpnQ"; //This is just for test purposes
var myAnswersRef = new Firebase('https://url.firebaseio.com/answers/'+ uid);
$scope.myAnswers = $firebaseArray(myAnswersRef);
console.log('Answer 1', $scope.myAnswers.question1answer);
console.log($scope.myAnswers);
第一个控制台日志没有return任何东西。第二个日志 returns 与数据库中的答案一样多的对象(已检查),所以我知道我可以很好地访问它,但我无法获得不同答案的值。
[object Object],[object Object],[object Object],[object Object]
¿我是否尝试使用 $scope.myAnswers.question1answer 错误地访问数据?
As you see, there is no answer ID. I did it like this because i thought i didnt need one. Please correct me if im wrong
你确实有一个 answer_id
。
构建数据时,请结合安全规则考虑它们。
{
"answers": {
"$uid": {
"$answer_id": {
}
}
}
}
这形成了 answers/$uid/$answer_id
的路径,因此 $uid
位置下的每个键都是 $answer_id
。
现在,进入显示问题。
The first console log doesn't return anything.
您正在处理异步数据,因此在 console.log()
运行时尚未下载。这没关系,因为 AngularFire 会在数据下载后触发 Angular 的 $digest
循环。
所以您需要做的就是将 answers
附加到范围。
// create a root ref
var ref = new Firebase('<my-firebase-app>');
// create a ref to the user's answers using .getAuth() and the uid
var myAnswersRef = root.child('answers').child(root.getAuth().uid);
// assign answers to $scope
$scope.answers = $firebaseArray(myAnswersRef);
现在您应该可以通过简单的 ng-repeat
:
<ul ng-repeat="answer in answers">
<li> {{ answer.text }} </li>
</ul>
我会回答我自己的问题,以防有人犯同样的错误。
基本上,我试图用 $firebaseArray 检索单个对象,用于检索对象数组。
使用 $firebaseArray 和 /root/answers 路径 我可以检索 用户回答的所有问题。 这可能太数据密集型,因为强制所有用户下载所有数据(有图片存储在 firebase 中)。
相反,我只是使用 $firebaseObject 来 下载我需要的单个对象 。
希望这对某人有所帮助。