Angular学习之服务

控制器只有需要时才会被实例化,不需要时就被销毁了,当我们需要在应用整个生命周期中都保持数据,并能够在控制器之间进行通信的时候,这时我们就需要服务了


###什么是服务

服务是一个单例对象在应用中只实例化一次(被$injector实例)并且是延迟加载


####用途

服务提供了把与特定功能的方法集中在一起的接口

对底层操作的封装(例如将数据的请求,组装)


###服务的创建

####factory()

angular.module('mApp').factory('myservice',function(){

return {
"name":"my",
"getName": function(){}
}
});

factory 第二个参数这个函数整个生命周期只会被调用一次

####service()

angular.module('mApp').service('phoneService',function(){

this.getName= function(){

}
})

相当于factory,区别是factory 返回的是对象({}) 而Service中定义的是个构造函数,service会自动通过new实例化服务返回服务实例

####constant()

常量注册成服务

常量:(值和对象)

angular.module('myApp').constant('apiKey','123')

####value()

注册成服务

angular.module('myApp').value('api','123')

区别:

用途:

####decorator()

$provider服务提供了在服务实例创建时对其进行拦截的功能

angular.module('myApp')
.config(function($provide){
$provide.decorator('Service',gitService)
})

//$delegate 服务对象
var gitService = function($delegate){

}

####provider()

所有服务工厂都是由$provide服务创建的,

$provider服务负责在在运行时期初始化这些提供者

提供者是一个具有$get()方法的对象,

$injector 通过调用

$get方法创建服务实例

所有服务的创建都构建在provider方法之上,provider()方法负责在$providerCache中注册服务

angular.module('myApp').factory('myservice',function(){
return {
	'username':'123'
}
})

两者等价

.provider('myservice',{

$get: function(){

return {
	'username':'asue'
}

}
})

如果希望在config()函数中可以对服务进行配置,必须要用provider()来定义服务