Javascript Angular:如何阻止$http调用阻塞UI?
在我的控制器中,我有以下代码:Javascript Angular:如何阻止$http调用阻塞UI?,javascript,angularjs,ajax,http,Javascript,Angularjs,Ajax,Http,在我的控制器中,我有以下代码: PartnersService.GetNonPartnerBanks().success(function (data) { vm.nonPartnerBanksList = data; }).error( function () { vm.nonPartnerBanksList = []; }); 它调用此服务: service.GetNonPartnerBanks = function() {
PartnersService.GetNonPartnerBanks().success(function (data) {
vm.nonPartnerBanksList = data;
}).error( function () {
vm.nonPartnerBanksList = [];
});
它调用此服务:
service.GetNonPartnerBanks = function() {
var nonPartnerBankUrl = config.baseUrl + 'public/nonPartnerBanks';
return $http.get(nonPartnerBankUrl);
};
这一切都是可行的,但如果服务器回复的时间更长,应用程序的UI就会冻结
我做错了什么,$http
服务没有使用AJAX和promissions,以便在调用时继续呈现UI
模板中使用数据的部分:
<ol class="nya-bs-select nya-dashboard"
required
name="futurePartner"
id="futurePartner"
ng-model="npc.futurePartner"
data-size="5"
ng-change="npc.hideSucessMessage()"
title-tpl="<span>{{npc.partnerSelectTitle}}</span>"
deep-watch="true"
no-search-title-tpl="<span>{{'general.NoSearchResult' | translate}}</span>"
data-live-search="true">
<li nya-bs-option="bankItem in npc.futurePartnerList" data-value="bankItem.id">
<a>
{{bankItem.name}}
</a>
</li>
</ol>
{{bankItem.name}
后续行动:
Vita的回答让我走上了正确的道路,不是$http阻止了我的UI,我有一个关于ajax调用的动画,给人的印象是UI冻结了$http调用是异步的,它返回承诺,你可以使用。然后和。捕获为ussual(成功和错误回调仅因历史原因而存在,不推荐使用) 但即使他们没有阻止你的UI,它也必须是不同的 “冻结”是什么意思 从何处调用该方法? 您是否在路由obejct resolve属性中使用它?如果是,那么这就是它的特性—等待所有承诺都被完全归档 问题肯定出在别的地方。
你能提供更多信息吗?或者更好一些jsbin?在我的情况下,冻结意味着屏幕完全是白色的,我正在使用数据填充一些下拉列表(nya bs select),我没有使用路由解析。我已经添加了vm提供的视图部分,即下拉列表,但我不能发布更大的示例,因为它是大型控制器/视图(我无法分解)的一部分。嗯,我不知道该指令的内部结构……但是,数组中有多少项?项本身有多大(是否有名称和id或更多?以及“深度观察”到底做了什么(它不在nya bs select文档中,所以我想它是你的)。我在考虑渲染的缓慢性。你是否有项目的ng统计数据,它可以告诉你,有多少观察者以及摘要周期有多长,因此如果没有花费太多时间的观察,我真的一眼就看不到任何奇怪的东西,但我想说你的控制器不应该太大:/array中的元素对于具有名称字段和id的简单对象,我将尝试安装ng stats,以了解发生了什么,深度监视不是我的属性,它是官方属性,但未列出(我尝试过删除它,但没有帮助)