Page 141 - AngularJS权威教程
P. 141
14.3 创建服务时的设置项 121
在上面的例子中, provider()方法在文本githubService后添加Provider生成了一个新的提 1
供者,githubServiceProvider可以被注入到config()函数中。
angular.module('myApp', []) 2
.config(function(githubServiceProvider) {
githubServiceProvider.setGithubUrl("git@github.com");
});
3
如果希望在config()函数中可以对服务进行配置,必须用provider()来定义服务。
provider()方法为服务注册提供者。可以接受两个参数。 4
name(字符串)
5
name参数在providerCache中是注册的名字。 name+Provider会成为服务的提供者。同时name
也是服务实例的名字。
例如,如果定义了一个githubService,那它的提供者就是githubServiceProvider。 6
aProvider(对象/函数/数组)
7
aProvider可以是多种形式。
如果aProvider是函数,那么它会通过依赖注入被调用,并且负责通过$get方法返回一个 8
对象。
如果aProvider是数组,会被当做一个带有行内依赖注入声明的函数来处理。数组的最后一 9
个元素应该是函数,可以返回一个带有$get方法的对象。
如果aProvider是对象,它应该带有$get方法。 10
provider()函数返回一个已经注册的提供者实例。
直接使用provider() API是最原始的创建服务的方法: 11
// 在模块对象上直接创建provider的例子
angular.module('myApp', []) 12
.provider('UserService', {
favoriteColor: null,
setFavoriteColor: function(newColor) { 13
this.favoriteColor = newColor;
},
// $get函数可以接受injectables
$get: function($http) { 14
return {
'name': 'Ari',
getFavoriteColor: function() { 15
return this.favoriteColor || 'unknown';
}
};
} 16
});
用这个方法创建服务,必须返回一个定义有$get()函数的对象,否则会导致错误。 17
可以通过注入器来实例化服务(由于AngularJS会处理服务的实例化,我们不需要自己动手,
更多信息请查看第24章): 18