angularJS Provider、factory、service详解及实例代码
factory
用Factory就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把service传进controller之后,在controller里这个对象里的属性就可以通过factory使用了。
app.controller('myFactoryCtrl',function($scope,myFactory){
$scope.artist=myFactory.getArtis();
});
app.factory('myFactory',function(){
var_artist='';
varservice={};
service.getArtist=function(){
return_artist;
}
returnservice;
});
service
Service是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后service返回"this"。你把service传进controller之后,在controller里"this"上的属性就可以通过service来使用了。
app.controller('myFactoryCtrl',function($scope,myService){
$scope.artist=myService.getArtis();
});
app.service('myService',function(){
var_artist='';
this.getArtist=function(){
return_artist;
}
});
provider
Providers是唯一一种你可以传进.config()函数的service。当你想要在service对象启用之前,先进行模块范围的配置,那就应该用provider。
app.controller('myProviderCtrl',function($scope,myProvider){
$scope.artist=myProvider.getArtist();
$scope.data.thingFromConfig=myProvider.thingOnConfig;
});
app.provider('myProvider',function(){
this._artist='';
this.thingFromConfig='';
this.$get=function(){
varthat=this;
return{
getArtist:function(){
returnthat._artist;
},
thingOnConfig:that.thingFromConfig
}
}
});
app.config(function(myProviderProvider){
myProviderProvider.thingFromConfig='Thiswassetinconfig()';
});
value和constant
$provide.value('myValue',10);
$provide.constant('myConstant',10);
/*
二者的区别:
1.value可以被修改,constant一旦声明就无法修改
2.value不可以在config中注入,constant可以。
*/
provider、factory、service三者的关系
app.provider('myDate',{
$get:function(){
returnnewDate();
}
});
//可以写成
app.factory('myDate',function(){
returnnewDate();
});
//可以写成
app.service('myDate',Date);
总结
- 所有的供应商都只被实例化一次,也就说他们都是单例的
 - 除了constant,所有的供应商都可以被装饰器(decorator)装饰
 - value就是一个简单的可注入的值
 - service是一个可注入的构造器
 - factory是一个可注入的方法
 - decorator可以修改或封装其他的供应商,当然除了constant
 - provider是一个可配置的factory
 
以上就是对angularJSProvider、factory、service的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!