Angular中创建服务(Service) - rushz/notepad GitHub Wiki
创建服务(Service)
在Angular中如何创建自己的服务,并注入到Angular的依赖注入系统中。
服务有如下特点
- 服务是单例模式的,所有的服务都只会实例化一次
- 服务是延迟加载的,只有第一次用到的时候才会被实例化
Angular注册的服务和通过requirejs加载的模块的区别
- Angular注册的服务,可以通过依赖注入,注入其他服务作为本服务的依赖,requirejs不能。
- requirejs的模块没有延迟加载特性。
服务的注册方式
- 通过Module提供的provider、factory、service、value和constant注册服务。
- 通过$provider服务提供的相关函数,注册服务。
var myModule = angular.module('myModule', []);
myModule.factory('serviceId', function() {
return serviceInstance;
});
angular.module('myModule', [], function($provide) {
$provide.factory('serviceId', function() {
return serviceInstance;
});
});
provider、factory、service、value和constant的区别
除了constant,本质上,其它四种注册方便最终都是调用provider完成服务的组成。 定义这么多的方法,主要是为了简化不同形式的服务的注册。 constant注册的服务,是常量,并且可以注入模块的config阶段,其它方式注册的不能。
- value: 注册一个变量,或者已经实例化的对象。
- service:注册实例的构造函数,系统自动调用该构造函数初始化服务对象。
- factory:注册一个函数,系统自动调用该函数,函数的返回值作为服务对象。
- provider:注册一个对象,该对象必须保护$get方法,系统自动调用$get方法,方法的返回值作为服务对象。
一下一种注册形式注册的服务,是等价的。
fuction Service(){}
$provide.provider('myService', {
$get: function() {
return new Service();
}
});
$provide.factory('myService', function(){
return new Service();
});
$provide.service('myService', Service);
$provide.value('myService', new Service());
decorator方法
decorator方法用于装饰服务对象,可以对服务对象装饰,或修改后,再返回。
$provide.decorator('myService2', function(myService) {
myService.name = "decorator";
return myService;
});