2016-01-25 61 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会花费一些时间执行自己(异步,我的猜测),同时隐藏调用被执行(并且什么都不隐藏),导致加载永远保持打开状态。

相关问题