【发布时间】:2018-06-07 10:06:03
【问题描述】:
我在数组上使用 AngularFire 和 promises ($loaded() on firebaseArray())。
目前,我正在使用以下代码:
问题:我转到第 1 页,数据已加载,一切正常。转到第 2 页并返回第 1 页。现在$loaded() 在我进行整页刷新之前不起作用。我该如何解决这个问题?
app.factory('Items', ['FBURL', '$firebaseArray', function(FBURL, $firebaseArray) {
return {
ofCategory: function(catId){
var ref = new Firebase(FBURL);
var refSearch = new Firebase.util.NormalizedCollection(...).select(...).ref();
var allItems= refSearch.orderByChild(...);
return $firebaseArray(allItems);
}
};
}]);
第1页:
function readData() {
if($scope.Items) {
$scope.Items.$destroy();
$scope.Items= null;
}
$scope.Items = Items.ofCategory($routeParams.id);
$scope.Items.$loaded().then(function(itm) {
...
});
}
第2页:
$scope.Items= Items.ofCategory($routeParams.id);
Firebase 文档1 说:“$loaded() 返回一个承诺,该承诺在从我们的数据库下载初始记录后解决。这只调用一次并且应该小心使用”,这可能就是我在这里得到的。
我的尝试:如图所示,在第 1 页上的 readData() 函数中,我在任何新加载之前销毁了 $scope.Items 变量。但它似乎没有做任何事情。 AFAIU,$loaded() 正在处理firebaseArray(),因此销毁$scope 数组可能无济于事。那么,在不需要完全刷新页面的情况下,我还应该做些什么来完成这项工作?
【问题讨论】:
-
你说“
$loaded()不起作用”是什么意思?有错误信息吗?.catch是否返回错误?描述错误的行为。 -
@georgeawg,谢谢。没有错误。
.catch没有发现任何错误。只是代码在加载一次后没有进入$loaded(),这可能是它应该做的。有人可能还会问“为什么不坚持使用加载的数组,为什么需要第二次调用?”我的回应是,因为我不只是简单地使用加载的数组。我对这些项目做了一些事情,所以我需要在进行计算之前调用“$loaded()”来准备好数据。 -
这怎么可能?此 GitHub 提交适用于 2014 年 1 月。我正在使用 2016 年 3 月发布的 AngularFire v1.2.0!之后的版本将不适用于 Firebase 2.x(我的当前版本)
-
看起来第二次,它实际上并没有触发
loaded(),所以then()部分没有被调用..
标签: angularjs firebase firebase-realtime-database angularfire angular-promise