AngularJS应用中的服务是一些用依赖注入捆绑在一起的可替换的对象。所有的服务都符合依赖注入的原则。它们用一个唯一的名字将自己注册进AngularJS的依赖注入系统(injector),并且声明需要提供给工场函数的依赖。
注册服务有2种方式:
1.使用angularjs.module api:
var myModule = angular.module('myModule', []);
myModule.factory('serviceId', function() {
var shinyNewServiceInstance;
//factory function body that constructs shinyNewServiceInstance
return shinyNewServiceInstance;
});
2.使用$provide服务:
angular.module('myModule', [], function($provide) {
$provide.factory('serviceId', function() {
var shinyNewServiceInstance;
//factory function body that constructs shinyNewServiceInstance
return shinyNewServiceInstance;
});
});
服务不仅可以被依赖,还可以有自己的依赖。依赖可以在工场函数的参数中指定。
例如:
angular.module('myModule', [], function($provide) {
$provide.factory('notify', ['$window', function(win) {
var msgs = [];
return function(msg) {
msgs.push(msg);
if (msgs.length == 3) {
win.alert(msgs.join("\n"));
msgs = [];
}
};
}]);
});
该服务依赖于$window服务,并且只是一个函数。
依赖的3种创建方式:
A.推断依赖(只适用于pretotyping和做demo)
function MyController($scope, greeter) {
...
}
$scope,greeter是需要注入函数的依赖
B.$inject标记(适用于控制器)
var MyController = function(renamed$scope, renamedGreeter) {
...
}
MyController.$inject = ['$scope', 'greeter'];
$scope,greeter是需要注入函数MyController
的依赖
C.行内标记(适应于声明指令的时候)
someModule.factory('greeter', ['$window', function(renamed$window) {
...;
}]);
$window,gretter是需要注入的依赖。