有没有办法在我的 AngularJS 应用程序启动时执行一些 JavaScript 代码?我有一些通用代码需要确保在任何应用程序指令/控制器之前运行。我不想被绑定到路由ng-view
,我需要这是一个通用的解决方案ng-app
。
我以为我可以使用模块配置,我实际上尝试过,但我试图调用一个服务,这似乎无法在模块加载上访问。
有没有办法在我的 AngularJS 应用程序启动时执行一些 JavaScript 代码?我有一些通用代码需要确保在任何应用程序指令/控制器之前运行。我不想被绑定到路由ng-view
,我需要这是一个通用的解决方案ng-app
。
我以为我可以使用模块配置,我实际上尝试过,但我试图调用一个服务,这似乎无法在模块加载上访问。
你可以这样做,
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
,但您也可以注入服务等。
相关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>
您可以使用模块 API 中的“运行”功能:http: //docs.angularjs.org/api/angular.Module
此代码将在注入器创建后执行,因此您应该能够获得您想要使用的服务。