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

时间:2015-11-06 10:46:44

标签: javascript angularjs ajax http

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

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和promises,以便在进行调用时继续呈现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阻止了我的用户界面,我在ajax电话上播放了动画,给人的印象是Ui冻结了

1 个答案:

答案 0 :(得分:2)

$ http调用是异步的,它返回promise,你可以使用.then和.catch作为ussual(成功和错误回调只是出于历史原因并且不推荐使用)

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

“冻结”是什么意思?

从哪里调用方法? 你在route obejct resolve属性中使用它吗?如果是 - 那就是它的特征 - 等待所有承诺全部归档。

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