Angular:如何阻止我的$ http调用阻止UI?

Angular:如何阻止我的$ http调用阻止UI?

问题描述:

在我的控制,我有以下代码:

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和承诺,以便在调用进行时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> 

追问:

Vita的回答让我在正确的线索,这不是说$ HTTP挡住了我的UI,我有ajax电话上的动画给人留下了Ui冻结的印象

$ http调用是异步的,它返回promise,你可以使用.then和.catch作为它的唯一对象(成功和错误的回调函数仅用于历史原因,他们被弃用)

但即使他们没有阻止你的用户界面,它必须是不同的东西。

“冻结”是什么意思?

从哪里调用该方法? 你在route obejct resolve属性中使用它吗?如果是 - 那么它的特点 - 它等待所有承诺全部完成。

Definitelly问题在别的地方。 你能提供更多的信息吗?或者甚至更好一些jsbin?

+0

在我的情况下,冻结意味着屏幕是完全白色的,我使用数据填充一些下拉列表(nya-bs-select),我没有使用路由解析。 –

+0

我已经添加了虚拟机正在馈送的视图部分,下拉列表,但我无法发布一个更大的示例,因为它是巨大的控制器/视图(我无法拆分)的一部分 –

+0

嗯,我不知道这个指令的内部结构......但是,数组中有多少项?项目本身有多大?(有没有名称和ID或更多?以及究竟是什么“深度观察”(它不在nya-bs选择文档中,所以我想它是你的)。我正在考虑缓慢渲染你有ng-stats的项目,它可以告诉你,有多少观察者和多长时间的摘要循环,所以如果没有一些手表需要太多的时间,我真的不能在第一眼看到任何奇怪的东西,但我会说你的控制器不应该是巨大的:/ –