angularJS Provider、factory、service详解及实例代码

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); /*

二者的区别:

  1. value可以被修改,constant一旦声明就无法修改
  2. value不可以在config中注入,constant可以。
    */

provider、factory、service三者的关系

rush:js;"> app.provider('myDate',{ $get: function() { return new Date(); } }); //可以写成 app.factory('myDate',function(){ return new Date(); }); //可以写成 app.service('myDate',Date);

总结

  1. 所有的供应商都只被实例化一次,也就说他们都是单例的
  2. 除了constant,所有的供应商都可以被装饰器(decorator)装饰
  3. value就是一个简单的可注入的值
  4. service是一个可注入的构造器
  5. factory是一个可注入的方法
  6. decorator可以修改或封装其他的供应商,当然除了constant
  7. provider是一个可配置的factory

以上就是对angularJS Provider、factory、service的资料整理,后续继续补充相关资料,谢谢大家对本站的支持

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...