我的控制器中有一个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。
答案 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>