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


Posted in Javascript onSeptember 21, 2016

factory

用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把 service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过 factory 使用了。

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 来使用了。

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(){
    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

$provide.value('myValue', 10);
$provide.constant('myConstant', 10);
/*


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

provider、factory、service三者的关系

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

Javascript 相关文章推荐
javascript闭包的理解和实例
Aug 12 Javascript
100个不能错过的实用JS自定义函数
Mar 05 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
Javascript函数式编程语言
Oct 11 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
input输入密码变黑点密文的实现方法
Jan 09 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
Jun 01 Javascript
JS判断一个数是否是水仙花数
Jun 11 Javascript
详解JS模块导入导出
Dec 20 Javascript
详解小程序rich-text对富文本支持方案
Nov 28 Javascript
ES10的13个新特性示例(小结)
Sep 23 Javascript
三剑客:offset、client和scroll还傻傻分不清?
Dec 04 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
Sep 21 #Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 #Javascript
D3.js实现折线图的方法详解
Sep 21 #Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 #Javascript
angular route中使用resolve在uglify压缩后问题解决
Sep 21 #Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 #Javascript
D3.js实现柱状图的方法详解
Sep 21 #Javascript
You might like
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JavaScript 布尔操作符解析  && || !
2012/08/10 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python+Wordpress制作小说站
2017/04/14 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python代码太长换行的实现
2019/07/05 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
如何利用Python 进行边缘检测
2020/10/14 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
机工车间主任岗位职责
2014/03/05 职场文书
委托公证书范本
2014/04/03 职场文书
财产公证书格式
2014/04/10 职场文书
我爱我校演讲稿
2014/05/21 职场文书
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL