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的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!