Глобальный предварительный загрузчик Ionic / Angular.js

Я новичок в angular и ionic. В общем потратил на это около 2х часов.

Интересно, может ли кто-нибудь указать мне правильное направление здесь.

В основном в моем controller.js я загружаю удаленный json через $http.

Я хочу показать предварительный загрузчик на каждом контроллере, который загружает удаленный контент.

    .controller('InformationCtrl', function ($scope, $http, $ionicLoading) {
    $scope.show = function () {
        $ionicLoading.show({
            template: '<p>Loading...</p><ion-spinner></ion-spinner>'
        });
    };
    $scope.hide = function () {
        $ionicLoading.hide();
    };
    $scope.show($ionicLoading);
    $http.get($scope.base_url + "information")
        .then(function (response) {
            $scope.hide($ionicLoading);
            $scope.information = response.data;
        }, function errorCallback(response) {
            $scope.hide($ionicLoading);
            alert("error loading content");
        });
})

Мне интересно, нет ли более простого способа просто создать глобальную функцию preloaderShow() и preloaderHide()? Кажется, что нужно включить много кода, чтобы включить приведенное ниже в каждый контроллер, и что, если я захочу позже изменить счетчик, мне придется обновлять каждую строку кода?

    .controller('InformationCtrl', function ($scope, $http, $ionicLoading) {
    $scope.show = function () {
        $ionicLoading.show({
            template: '<p>Loading...</p><ion-spinner></ion-spinner>'
        });
    };
    $scope.hide = function () {
        $ionicLoading.hide();
    };

Я только что использовал стартовое приложение, поэтому, возможно, я что-то упускаю, я видел что-то при использовании Сервисов, любой быстрый пример или предложение будут оценены.


person limit    schedule 15.05.2016    source источник


Ответы (1)


Вы можете легко абстрагировать его на службу

angular.module('app').factory('loader', function loaderFactory ($ionicLoading) {
  return {
    show: function () {
      $ionicLoading.show({
        template: '<p>Loading...</p><ion-spinner></ion-spinner>'
      });
    },
    hide: function () {
      $ionicLoading.hide();
    };
  }  
});

то в тебе контроллер

angular.module('app').controller('InformationCtrl', function ($scope, $http, loader) {
  loader.show();
  $http.get($scope.base_url + "information")
  .then(function (response) {
    $scope.information = response.data;
  }, function errorCallback(response) {
    alert("error loading content");
  })
  .finally(function () {
    loader.hide();
  });
}
person Dmitriy Nevzorov    schedule 15.05.2016