无法与 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 下载我需要的单个对象

希望这对某人有所帮助。