我有一系列键,我想从firebase的其他对象列表中获取具有此键的对象。它现在看起来如何。我将索引列表作为参数传递给服务中的方法,并通过循环我得到每个对象并将其推送到数组,该数组在控制器中读取。但是,我觉得它看起来很难看。我怎样才能一次性从firebase获取所有对象,而不是foreach并且之后调用$ apply()?我简化了一点,但我认为这个想法很清楚。 感谢
厂
(function() {
angular.module("app").factory('app.factory', appFactory);
appFactory.$inject = ['$rootScope']
function appFactory($rootScope) {
self.loadList = function(list) {
self.ListingData = [];
angular.forEach(list, function(val, key) {
db.child('listings').child(key).once('value').then(function(product) {
var value = product.val();
$rootScope.$apply(function() {
self.ListingData.push(value);
});
}).catch(function(error) {
console.log(error);
});
});
};
return self;
}
})();
控制器
(function() {
angular.module("app").controller('app.Ctrl', appCtrl);
appCtrl.$inject = ['app.factory', '$scope'];
function listingsCtrl(appFactory, $scope) {
$scope.loadListing = function(list) {
listingsFactory.loadList(list);
$scope.list = listingsFactory.ListingData;
}
// load list by default
$scope.loadListing(list);
}
})();
答案 0 :(得分:0)
使用Promise.all
和map
可能会让事情变得更容易:
self.loadList = function (list) {
var getListings = list.map(function (val, key) {
return db.child('listings').child(key).once('value');
});
Promise.all(getListings)
.then(function (products) {
self.ListingData = products.map(function (product) {
return product.val();
});
})
.catch(function (error) {
console.log(error);
});
};