【问题标题】:How get list from firebase at once?如何一次从firebase获取列表?
【发布时间】:2017-02-01 07:21:22
【问题描述】:

我有一组键,我想从 firebase 的其他对象列表中获取具有此键的对象。现在的样子。我将索引列表作为参数传递给服务中的方法,并通过循环获取每个对象并将其推送到数组,该数组在控制器中读取。但是,我觉得它看起来很丑。如何在没有 foreach 和之后调用 $apply() 的情况下一次从 firebase 获取所有对象?我简化了一点,但我认为想法很清楚。 谢谢

工厂

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

    }
})();

【问题讨论】:

  • 可能会看看 angularFire 以使其更容易

标签: angularjs firebase firebase-realtime-database


【解决方案1】:

使用Promise.allmap 可能会让事情变得更简单:

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

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多