2015-11-06 74 views
0

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

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凍結的印象

回答

2

$ http調用是異步的,它返回promise,你可以使用.then和.catch作爲它的唯一對象(成功和錯誤的回調函數僅用於歷史原因,他們被棄用)

但即使他們沒有阻止你的用戶界面,它必須是不同的東西。

「凍結」是什麼意思?

從哪裏調用該方法? 你在route obejct resolve屬性中使用它嗎?如果是 - 那麼它的特點 - 它等待所有承諾全部完成。

Definitelly問題在別的地方。 你能提供更多的信息嗎?或者甚至更好一些jsbin?

+0

在我的情況下,凍結意味着屏幕是完全白色的,我使用數據填充一些下拉列表(nya-bs-select),我沒有使用路由解析。 –

+0

我已經添加了虛擬機正在饋送的視圖部分,下拉列表,但我無法發佈一個更大的示例,因爲它是巨大的控制器/視圖(我無法拆分)的一部分 –

+0

嗯,我不知道這個指令的內部結構......但是,數組中有多少項?項目本身有多大?(有沒有名稱和ID或更多?以及究竟是什麼「深度觀察」(它不在nya-bs選擇文檔中,所以我想它是你的)。我正在考慮緩慢渲染你有ng-stats的項目,它可以告訴你,有多少觀察者和多長時間的摘要循環,所以如果沒有一些手錶需要太多的時間,我真的不能在第一眼看到任何奇怪的東西,但我會說你的控制器不應該是巨大的:/ –