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