firebase logged data
Object {information: "way", status: "pending", title: "killa"}
controllers.js:43 Object {information: "way", status: "pending", title: "killa"}
controllers.js:42 Object {information: "way", status: "pending", title: "killa2"}
controllers.js:43 Object {information: "way", status: "pending", title: "killa2"}
我似乎无法获取从firebase获取的项目列表,但我能够记录它。
<ion-list ng-controller="pendingTasksCtrl">
<ion-item ng-click="task.completed = !task.completed" class="item-icon-right" ng-repeat="p in pending">{{p.title}}{{p.information}}
<i class="icon ion-ios-arrow-left"></i>
<ion-option-button class="ion-trash-a" ng-click="removeItem($index,1)">
</ion-option-button>
<ion-option-button ng-controller="editTaskCtrl" class="ion-edit" ng-click="modal.show()">
</ion-option-button>
</ion-item>
</ion-list>
我想将快照分配给$ scope.pending并将其绑定在前端。但我得到一个未定义的错误
.controller('pendingTasksCtrl', function($scope,$firebaseArray,$firebaseObject,$rootScope,$ionicModal)
{
var task = "AllTasks";
var id =0;
var itemref = new Firebase("https://tasksbylima.firebaseio.com/");
//$scope.items = $firebaseArray(itemref);
//var status = "completed";
$scope.test = function()
{
itemref.orderByChild("status").equalTo("pending").on("child_added", function(snapshot)
{
$scope.pending = snapshot.val();
console.log(snapshot.val());
console.log(pending);
// console.log("**************find me "+itemref.orderByChild("status").equalTo("task").on("child_added"));
});
}
})
答案 0 :(得分:0)
您正在测试console.log(pending)
,但它应该是console.log($scope.pending)
。 pending
未定义,因为您没有任何具有该名称的单独变量。
修改强>
根据你的评论,我猜你丢失了对数组的引用。当您使用=
替换$scope
中的当前数据时,您正在指定一个新数组,并且视图仍然引用了第一个数组。我看到两种可能的解决方案:
解决方案1
用对象包裹数组。
$scope.model = {
pending: []
}
在视图中:将pending
更改为model.pending
。
在控制器中:使用$scope.model.pending
代替$scope.pending
。这样,对数组的引用不会改变,因为它是对象的属性。
解决方案2
而不是使用=
使用splice
和for
。
在控制器的开头添加数组初始化:
$scope.pending = [];
然后,将$scope.pending = snapshot.val()
更改为:
var data = snapshot.val();
$scope.pending.splice(0) // this will empty the array
// This will insert new elements
for(var i = 0; i < data.length; i++) {
$scope.pending.push(data[i]);
}
答案 1 :(得分:0)
我遇到了与Firebase和Angular 2类似的问题。.on
函数的问题是它们在AngularJS中以某种方式松散与this
的连接,在AngularJS中我想可能存在类似的问题与$scope
。
试试这个:
itemref.orderByChild("status").equalTo("pending").on("child_added", function(snapshot)
{
$scope.pending = snapshot.val();
console.log(snapshot.val());
console.log($scope.pending);
}.bind($scope));
现在它应该可以在您的HTML /前端中使用。
答案 2 :(得分:0)
var itemref = new Firebase("https://tasksbylima.firebaseio.com/task");
var taskref = itemref.orderByChild("status").equalTo(true);
taskref.on("value", function(response) {
$scope.filterTasks = response.val();
完美无缺