2016-01-25 86 views
0

我正在從服務器加載數據,通過調用init()角度的方法。我使用$ionicLoading.show();作爲加載程序,但它沒有顯示加載時間。 我能夠成功從服務器獲取數據,但未顯示加載程序。

我試過angular.element(document).ready(function() { });. 但仍然裝載機是不可見的我。 我需要頁面加載本身的一些數據。

示例代碼:init函數外

angular.module('App.controllers').controller('WorkoutCtrl', function ($scope,$state,$ionicModal,serviceEngine,$ionicPopup,$rootScope,$ionicLoading,$location) { 

    var init = function(){ 
     $ionicLoading.show({template: 'Loading...</p>'}); 
     if(deviceApi.checkConnectionStatus() === 'online'){ 
      console.log('We are inside online'); 
       serviceEngine.getMethod()//server call 
        .success(function(data,status,headers){ 
         $ionicLoading.hide(); 
        }) 
        .error(function(){ 
         $ionicLoading.hide(); 
        }) 
     }else{ 
      $ionicLoading.hide(); 
      $ionicPopup.alert({title: 'ERROR',template: 'Application is offline. Check your network connection.'}); 
     } 

    } 

    init(); 
+0

請給出一些代碼片段 –

+0

您可以嘗試在AngularJS的run區塊中調用'$ ionicLoading.show();'。 – sp00m

+0

它在單擊事件上工作,但不工作在任何頁面加載事件上。 –

回答

0

寫入ionicLoading.show。

例如:

angular.module('App.controllers').controller('WorkoutCtrl', function ($scope,$state,$ionicModal,serviceEngine,$ionicPopup,$rootScope,$ionicLoading,$location) { 



    $ionicLoading.show({ 
      template: '<div class="icon ion-loading-a"></div> Loading... ', 
      animation: 'fade-in', 
      showBackdrop: true, 
      maxWidth: 500, 
      showDelay: 100 
     }); 


    var init = function(){ 

     if(deviceApi.checkConnectionStatus() === 'online'){ 
      console.log('We are inside online'); 
       serviceEngine.getMethod()//server call 
        .success(function(data,status,headers){ 
         $ionicLoading.hide(); 
        }) 
        .error(function(){ 
         $ionicLoading.hide(); 
        }) 
     }else{ 
      $ionicLoading.hide(); 
      $ionicPopup.alert({title: 'ERROR',template: 'Application is offline. Check your network connection.'}); 
     } 

    } 

    init(); 
+0

不工作!!!! –

0

嘗試之後,這應該爲你工作:

angular.module('App.controllers').controller('WorkoutCtrl', WorkoutCtrl); 
WorkoutCtrl.$inject = ['$scope', '$state', '$ionicModal', 'serviceEngine', '$ionicPopup', '$rootScope', '$ionicLoading', '$location']; 

function WorkoutCtrl ($scope, $state, $ionicModal, serviceEngine, $ionicPopup, $rootScope, $ionicLoading, $location) { 
    var init = function() { 
     $ionicLoading.show({ 
     content: 'Loading...', 
     animation: 'fade-out', 
     showBackdrop: false, 
     maxWidth: 200, 
     showDelay: 500, 
     }); 
     if(deviceApi.checkConnectionStatus() === 'online'){ 
      console.log('We are inside online'); 
       serviceEngine.getMethod() 
       .then(function (data,status,headers) { // DO SOMETHING WITH DATA 

        }) 
        .catch(function() { // Error Handling 

        }) 
        .finally(function() { // Finally close the Loader 
        $ionicLoading.hide(); 
        }); 
     }else{ 
      $ionicLoading.hide(); 
      $ionicPopup.alert({title: 'ERROR',template: 'Application is offline. Check your network connection.'}); 
     } 
    } 


    init(); 
} 

我搬到代碼隱藏裝載機終於,然而,你可以做到這一點的然後或趕上。我喜歡用這種方式組織我的服務調用,然後:用服務調用的數據做一些事情,Catch:處理錯誤,最後:做清理的東西。

+0

不能正常工作! –

+0

你在控制檯上獲取console.log嗎?任何JavaScript錯誤? – Ravish

+0

不,我沒有收到任何類型的錯誤。 –

0

我有類似的問題($ ionicLoading.hide()不工作)當我在我的應用程序中實現localStorage緩存。我在各處都調試過大量的console.logs,因爲我在控制檯上沒有出現任何錯誤。我得出的結論是,檢索緩存數據非常快,$ ionicLoading.hide()在$ ionicLoading.show()之前完成執行。 $(函數(){$ ionicLoading.hide()},100); $ timeout(function(){$ ionicLoading.hide()},100); 我以前見過這個技巧在與Android鈦,所以我想它是與Android的代碼的處理方式......

編輯

如果你這樣做$ ionicLoading.show({延遲: 100}),然後$ ionicLoading.hide()它的工作原理,我的意思是,如果兩個調用速度非常快(小於100毫秒),加載永遠不會顯示,應該是預期的。 我認爲演出電話已經註冊,隱藏電話取消了它。明顯!但是當你不使用延遲選項時,show call會花費一些時間執行自己(異步,我的猜測),同時隱藏調用被執行(並且什麼都不隱藏),導致加載永遠保持打開狀態。

相關問題