当前位置: 首页 > 面试题库 >

使用AngularJS加载大型数据集

樊宏义
2023-03-14
问题内容

我正在尝试设计一种无需分页就可以将大量数据(最多1000行)加载到页面中的方法。这方面的第一个障碍是以并行咬大小块查询数据库,这是我在如何使用AngularJS进行顺序RestWeb服务调用的解决方案的帮助下完成的。

但是,我在实施时遇到了两个问题:

  1. 每个返回的对象都将传递到一个数组中,然后该数组本身将作为Angular用来绑定的数组返回。即[[{{键:值,键:值,键:值},{键:值,键:值,键:值}],[{键:值,键:值,键:值},{键:值,键:值,键:值}]]因此,我不能使用ng-repeat =“数据中的项目”,因为数据是一个数组数组。执行“数据中的项目[0]”确实可以使项目可用。串联似乎是答案,但我还无法找出使之起作用的方法。

  2. 我正在对数据库发出多个请求,每个请求都正确返回,但是在所有请求完成之前页面不会呈现-这完全抵消了首先执行多个请求的意义。

因此,查看我的代码,如何重新编写代码以解决这两个问题?以便将数据作为一个数组返回,并在每次查询完成时呈现数据?

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进行过滤也经历了明显的延迟,直到缩小结果范围为止。另一方面,几百行的表现很好,并允许本机过滤-这是我实现的主要目标。


问题答案:

如果要单独对待每个承诺(单独显示每个承诺),则不能真正地将所有的承诺合计为q(使它们成为成功或失败的一个大承诺)。

我会尽快将您得到的内容重新纳入范围。下面是一个示例

    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/

这里存在一个问题,即项目的顺序基于退货的时间,而不是原始的请求顺序。我让你自己弄清楚那个。



 类似资料:
  • 当我将这个DBpedia(2015-10,嗯,大约10亿个三倍)加载到GraphDB 9.1.1中时,CPU负载在大约1300万个三倍和空闲之后下降到0%。在我手动终止之前,进程不会终止。 与通过Xmx CMD选项分配给java的512GB相比,该机器有足够的磁盘空间和足够多的RAM。 我试图加载的文件提供在这里:https://hobbitdata.informatik.uni-leipzig.

  • 我想从InstaCart https://www.InstaCart.com/datasets/grocery-shopping-2017加载大型.csv(3.4百万行,20.6万用户)开源数据集 基本上,我在将orders.csv加载到Pandas数据帧中时遇到了麻烦。我想学习将大文件加载到Pandas/Python中的最佳实践。

  • 问题内容: 我在将服务中的数据填充到视图中时遇到问题。我有这样定义的服务 和我的控制器 如果我从控制器使用$ http.get,数据将很好地填充,但是,如果我尝试从服务中调用数据,那么我什么也不会得到。我知道查询是异步的,但是我很难理解一旦返回数据就如何填充$ scope变量。我可以使用$ rootscope广播事件并在控制器中侦听它,但这似乎并不是完成此事件的正确方法。对于如何正确执行此操作的任

  • 问题内容: 在数据完成加载之前,如何使AngularJS显示加载微调框? 如果我的控制器是静态设置的,并且填充了AJAX加载器,我希望微调器显示直到AJAX加载完成,然后使用检索到的数据填充绑定范围。 此代码立即填充绑定范围,并且如果为空,则微调框将被替换为空。 我应该如何干净地做这件事? 问题答案: 我会根据其他答案创建一个自定义指令,但是这是没有指令的情况下如何实现的,这可能是在进入更复杂的功

  • 我的问题是: 我的加密代码在64个字符以下运行良好。但如果超过64个字符,我会得到以下错误 加密代码 密钥生成代码 我的问题是: 可以用512位密钥加密大文本吗?我的密码有错吗? 注意:如果有人想要完整的代码,我会稍后更新。

  • 问题内容: 我在angularJS应用程序中有此工作实现,该应用程序从URL获取一些链接并绘制它们。但是,URL上的链接会不断更新,我想定期更新此$ scope.listlinks,比如说每10秒更新一次。 我试过没有运气的setInterval。 Java脚本 的HTML 问题答案: 尽管jvandemo的答案会起作用,但我认为可以稍作改进。通过使用,它打破了Angular遵循的依赖项注入约定,