2015-03-22 4 views
2

Я пытаюсь использовать $ionicLoading внутри фабрики. (Я думал, что это хорошая идея, чтобы иметь код в одном месте, не повторяя его в каждом контроллере)

angular.module('<my app>.message', ['ionic'])                                 
    .factory('Message', [function($scope, $ionicLoading){                               

    var messageFactory = {};                                      

    messageFactory.successMessage = function(message){                               
     $ionicLoading.show({ templateUrl: 'templates/messages/success.html',                          
          noBackdrop: true, duration: 1000 });                             
    }                                            
    return messageFactory;                                      
    }]); 

Но проблема в том, что я получаю эту ошибку Cannot read property 'show' of undefined, так как тот же код работает отлично в контроллере, Мне интересно, нужно ли это работать внутри контроллера. Если это так, мой вопрос заключается в том, как я могу избежать использования одного и того же кода для ящиков сообщений внутри проекта.

ответ

1

У вас проблема с синтаксисом (see this for details).

Вы не правильно вводите инъекцию. Ваш код должен выглядеть так: .factory('Message', ['$scope', '$ionicLoading', function($scope, $ionicLoading) {

Я предпочитаю автоматически комментировать мой код на этапе сборки. См. ng-annotate для получения более подробной информации

Это мой завод для сообщений «тостов» в браузере или устройстве: При запуске в Кордове покажите родной тост. Вне Кордовы, покажите ионное всплывающее окно ($ ionicLoading) за тот же период времени. Использует API для плагина Toast - сообщение, продолжительность, положение. Различия в том, что: Ионное всплывающее окно игнорирует положение и не позволяет ничего делать, пока оно отображается.

(требуется Toast Plugin)

.factory('Toast', function($ionicLoading, $cordovaToast) { 
    return { 
     show: function (message, duration, position) { 
      message = message || "No message given..."; 
      duration = duration || 'short'; 
      position = position || 'top'; 

      if (!!window.cordova) { // Use the Cordova Toast plugin 
       $cordovaToast.show(message, duration, position); 
      } 
      else { 
       duration = 2000; 
       $ionicLoading.show({ template: message, duration: duration }); 

      } 
     } 
    }; 
}) 
+0

Что проблема синтаксис OP в? – naturallyfoster

+1

обновил ответ. –

Смежные вопросы