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