我正在开发一款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错误地访问数据?
答案 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 来下载我需要的单个对象。
希望这有助于某人。