使用AngularJS加载大型数据集

前端之家收集整理的这篇文章主要介绍了使用AngularJS加载大型数据集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试设计一种方法来将大量数据(超过1000行)加载到页面中,而不需要分页.这方面的第一个障碍是以并行的大小块查询数据库,我在 How to make sequentially Rest webservices calls with AngularJS?解决方案的帮助下完成了

然而,我遇到了两个问题:

>每个返回的对象都被传递到一个数组中,然后该数组本身作为Angular用于绑定的数组返回.即[[{key:value,key:value,key:value},{key:value,key:value}],[{key:value,{key: value,key:value}]]因此我不能使用ng-repeat =“item in data”,因为data是一个数组数组.执行“数据[0]中的项目”确实使项目可用.连接似乎是答案,但我无法找到一种方法使其工作.
>我正在向数据库发出多个请求,并且每个请求都会正确返回,但是在所有请求都完成之前页面才会呈现 – 这完全否定了首先执行多个请求的要点.

所以查看我的代码,如何重新编写它来解决这两个问题呢?那么数据作为一个数组返回,并且每次查询完成时都会呈现数据?

app.factory('ScanService',function($http,$q) {
  function fetchOne(stepCount) {
    return $http({
      method: 'GET',url: '/index.PHP/scans',params: {step:stepCount}
    })
    .then(function onSuccess(response) {
      return response.data;
    }
    return {
      fetchAll: function(steps) {
        var scans = [];
        for (var i = 1; i <= steps; i++) {
          scans.push(fetchOne(i));
        }
        return $q.all(scans);
      }
    };
});

app.controller.ScanCtrl = function($scope,$q,ScanService) {
  $scope.scans = ScanService.fetchAll(10);
};

跟进

我应该补充说,我确实根据下面的解决方案和angular.forEach()设法使其工作.不能建议任何使用“大数据”的人走这条路.大约1000行,浏览器不堪重负,并开始大幅减速.尝试使用angular.filter进行过滤也会出现明显的延迟,直到结果缩小为止.另一方面,几百行工作得相当好,并允许本机过滤 – 这是我实现的关键目标.

如果你想单独处理每一个(单独显示每一个),你就不能真正地将这些承诺放在一起(这使得它们成为一个成功或失败的重大承诺).

一旦你得到它们,我会把你得到的东西推回到范围内.以下是一个例子:

function MyCtrl($scope,$timeout,$q) {
        var fetchOne = function() {
            var deferred = $q.defer();
            $timeout(function() {
                deferred.resolve([random(),random() + 100,random() + 200]);
            },random() * 5000);
            return deferred.promise;
        };

        $scope.scans = [];
        for (var i = 0; i < 2; i++) {
            fetchOne().then(function(items) {
                angular.forEach(items,function(item) {
                    $scope.scans.push(item);
                });
            });
        };
    }

这是一个小提琴,显示它在行动:http://jsfiddle.net/wWcvx/1/

这里存在一个问题,即项目的顺序取决于它们何时被退回,而不是基于您的原始请求订单.我会让你自己想出那一个.

猜你在找的Angularjs相关文章