Выполнение кода при запуске углового приложения


есть ли способ, которым я могу выполнить некоторый код JavaScript при запуске моего приложения AngularJS? У меня есть некоторый общий код, который мне нужно убедиться, что работает перед любой из директив/контроллеров приложения. Я не хочу привязываться к маршрутам и ng-view, Мне нужно, чтобы это было общее решение для любого ng-app.

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

3 52

3 ответа:

вы можете сделать такое:

var app = angular.module('myApp',[]);

app.run(function($rootScope) {
    //.....
});

короткая версия

вы должны использовать module.run(initializationFn) функция, где фактический метод может зависеть от услуг. Вы можете вводить зависимости как обычно:

var app = angular
    .module('demoApp', [])
    .run(['$rootScope', function($rootScope) {
        $rootScope.bodyClass = 'loading';
        // Etc. Initialize here.
    }]);

в Примере инициализация зависит от $rootScope, но вы можете также впрыснуть обслуживания, etc.

версия

соответствующего module.run документация довольно лаконично, как и другие (отличные) ответы. Позвольте мне объединить его в более подробном пример, который также показывает, как ввести factory созданный сервис в вашем initializationFn:

var app = angular.module('demoApp', []);

// Service that we'll also use in the .run method
app.factory('myService', [function() {
  var service = { currentItem: { started: new Date() } };
  
  service.restart = function() {
    service.currentItem.started = new Date();
  };
  
  return service;
}]);

// For demo purposes
app.controller('demoCtrl', ['$scope', 'myService', function($scope, myService) {
  $scope.header = 'Demo!';
  $scope.item = myService.currentItem;
  $scope.restart = myService.restart;
}]);

// This is where your initialization code goes, which
// may depend on services declared on the module.
app.run(['$window', 'myService', function($window, myService) {
  myService.restart();
  $window.alert('Started!');
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="demoApp" ng-controller='demoCtrl' ng-cloak>
  <h1>{{ header }}</h1>
  <p>Current item started: {{ item.started }}</p>
  <p><button ng-click="restart()">Restart</button></p>
</div>

вы можете использовать функцию "run" из API модуля: http://docs.angularjs.org/api/angular.Module

этот код будет выполнен после создания инжектор так что вы должны быть в состоянии получить на службе вы не хотите использовать.