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,以了解发生了什么,深度监视不是我的属性,它是官方属性,但未列出(我尝试过删除它,但没有帮助)