Ответ 1
Вы можете сделать это,
var app = angular.module('myApp',[]);
app.run(function($rootScope) {
//.....
});
Есть ли способ, которым я могу выполнить некоторый код JavaScript при запуске моего приложения AngularJS? У меня есть общий код, который мне нужно, чтобы убедиться, что он запускается перед любыми директивами/контроллерами приложений. Я не хочу привязываться к маршрутам и ng-view
, мне нужно, чтобы это было общее решение для любого ng-app
.
Я думал, что могу использовать Module Config, и я действительно пробовал это, но я пытаюсь вызвать службу, которая кажется невозможной для доступа к загрузке модуля.
Вы можете сделать это,
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
, но вы также можете вводить сервисы и т.д.
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>
Вы можете использовать функцию "запустить" из API модуля: http://docs.angularjs.org/api/angular.Module
Этот код будет выполнен после создания инжектора, чтобы вы могли получить доступ к службе, которую вы хотите использовать.
Контроллер Yor похож на функцию, добавляет вызов функции в нижней части контроллера, и у вас есть функция запуска!