无法与Firebase同步访问阵列

时间:2015-12-18 12:42:25

标签: javascript angularjs ionic firebase angularfire

我正在开发一款Ionic应用程序。它基本上是一个quizz,用户发布一些问题的答案。

这是我的数据库结构

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);

第一个控制台日志不会返回任何内容。第二个日志返回与数据库中的答案一样多的对象(已选中),因此我知道正在访问它,但我无法获得不同答案的值。

[object Object],[object Object],[object Object],[object Object]

¿我是否试图使用$ scope.myAnswers.question1answer错误地访问数据?

2 个答案:

答案 0 :(得分:0)

  

如您所见,没有答案ID。我是这样做的,因为我   以为我不需要一个。 如果我错了请纠正我

你确实有一个answer_id

在构建数据时,请结合安全规则考虑它们。

{
   "answers": {
      "$uid": {
         "$answer_id": {

         }
      }
   }
}

这会生成answers/$uid/$answer_id的路径,因此$uid位置下的每个密钥都是$answer_id

现在,显示问题。

  

第一个控制台日志不会返回任何内容。

您正在处理异步数据,因此在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>

答案 1 :(得分:0)

我回答我自己的问题,万一有人犯了同样的错误。

基本上,我试图用$ firebaseArray检索单个对象,用于检索对象数组。

$ firebaseArray与/ root / answers路径一起使用我可以检索用户回答的所有问题。这可能是数据过于密集,因为我强迫所有用户下载所有数据(存储在firebase中的图片)。

相反,我只是使用 $ firebaseObject 下载我需要的单个对象

希望这有助于某人。