如何在http get请求期间保持Angular UI响应?

时间:2015-10-30 15:43:17

标签: angularjs http-get

我的控制器中有一个get请求:

  $http.get('/api/ideas').success(function(ideas) {
    vm.ideas = ideas;
  });

一旦我的控制器被调用,这个api就会被调用,我的UI变得没有响应,直到我从回调中得到结果/列出所有想法(显然有mg-repeat)。当我有例如在我的数据库中有1000个想法,我的用户界面没有响应3-5秒。但我认为这个电话是一个回调?!

这就是我的后端的样子:

    router.get('/api/ideas', controller.find);

    exports.find = function(req, res) {
      Idea.find(function (err, ideas) {
        if(err) { return handleError(res, err); }
        return res.json(200, ideas);
      });
    };

这里有什么问题?

编辑 - 已解决:

当我在这样的后端延迟时:

exports.index = function(req, res) {
  Idea.find(function (err, ideas) {
    if(err) { return handleError(res, err); }
    setTimeout(function() {
      return res.json(200, ideas);
    }, 3000);
  });
};

虽然我只有2个想法,但UI在3秒内响应。我仍然可以点击其他部分,直到我得到回复。所以我觉得@Iggy是对的。问题不是http get,而是ng-repeat。

1 个答案:

答案 0 :(得分:3)

问题不在于此处的回调(它的异步),问题是通过在DOM中逐个添加您的想法来减慢您的用户界面。

要解决此问题,您可以使用分页,或者查看提高ng-repeat性能的不同方法。

这样做的基本方法是使用limitTo过滤器:

<div ng-init="totalDisplayed=20" ng-repeat="item in items | limitTo:totalDisplayed">
{{item}}
</div>
<button class="btn" ng-click="totalDisplayed = totalDisplayed+20">Load more</button>