2015-05-26 9 views
2

Каковы варианты использования метода angular.run? У меня есть служба heavy, которая расходует resources и занимает некоторое время, чтобы создать ее, прежде чем использовать ее с моим view.вводят `обслуживание` внутри` run` метод

angular.module('myApp').service('heavyService',function($timeout){ 
     this.someAjaxCall=function(){ 

     } 
}); 

angular.module('myApp').run(function(heavyService){ 
     // How can i use my heavyService here and later use in app 
}); 

Как придать service внутри run метода, а затем использовать его в application?

ответ

2

Вызов заказа: компилировать функции

  1. app.config()
  2. app.run()
  3. директивы в (если они находятся в йот) ссылка Функции
  4. app.controller()
  5. директивы в (опять же, если найден)

Блоки запуска - выполняются после создания форсунки и используются для запуска приложения . Только экземпляры и константы могут быть введены в блоки запуска. Это необходимо для предотвращения дополнительной конфигурации системы во время работы приложения.

source

angular.module('myApp').run(['heavyService', function(heavyService) { 

}]); 
1

Run блок есть для инициализации значения, которые мы хотим сделать доступным через вне application.By инъекционной службы в перспективе будет только установить значение переменных услуг. Всякий раз, когда какой-либо другой компонент запрашивает обслуживание, он получает инициализированное значение (потому что сервис носит одинарный характер).

Код

//it acts as initialization block 
angular.module('myApp').run(function(heavyService){ 
    //here you can access service variables and method 
    //this variable value has been set before asked from any controller 
    heavyService.someVariable = 'Init Value'; 
}); 

В конфигурации фазы также можно задать значения переменных, которые должны быть инициализированы (как делают некоторые параметры конфигурации), но реальная вещь конфигурационный блок не имеет доступа к сервис, у них есть только доступ к provider также $rootScope в недоступном состоянии, пока вы находитесь в фазе config.

Преимущество над интернализацией значения внутри блока ПУСК они имеют доступ для запуска $rootScope & также можно обрабатывать маршрут, связанное событие как $locationchangestart, $locationchangesuccess, $routechangestart и т.д.

+0

Прохладный, вызывая eavyService.getAjaxCall() внутри моего метода запуска и установки данных ответа на heavyService.jsonData = jsonResponse ... как я могу получить доступ к этим данным в моем контроллере ... без повторного вызова ajax. ..Спасибо за замечательное объяснение – Shane

+0

за то, что вам нужно сохранить переменную сферы внутри службы. который будет хранить данные, возвращенные из ajax. Затем внутри вашего контроллера вам нужно сначала ввести службу, затем синхронизировать эту служебную переменную с переменной области –

2

А что-то вроде этого? (По John Papa's style guide "Route Resolve Promises"):

// route-config.js 
angular 
    .module('app') 
    .config(config); 

function config($routeProvider) { 
    $routeProvider 
     .when('/avengers', { 
      templateUrl: 'avengers.html', 
      controller: 'Avengers', 
      controllerAs: 'vm', 
      resolve: { 
       moviesPrepService: moviesPrepService 
      } 
     }); 
} 

function moviesPrepService(movieService) { 
    return movieService.getMovies(); 
} 

// avengers.js 
angular 
    .module('app') 
    .controller('Avengers', Avengers); 

Avengers.$inject = ['moviesPrepService']; 
function Avengers(moviesPrepService) { 
     var vm = this; 
     vm.movies = moviesPrepService.movies; 
} 

В принципе, что это делает это подготавливает услугу и получает все данные AJAX'ed до маршрута решает, и как только это будет сделано, то у вас есть доступ к статическим данным в контроллер.

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