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学习笔记8 用JSON做原型
Jan 11 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
Jan 22 Javascript
AngularJS打开页面隐藏显示表达式用法示例
Dec 25 Javascript
JS实现移动端实时监听输入框变化的实例代码
Apr 12 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
微信小程序canvas拖拽、截图组件功能
Sep 04 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
Jun 01 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调用数据库的存贮过程
2006/10/09 PHP
php xml文件操作代码(一)
2009/03/20 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
用实例说明python的*args和**kwargs用法
2013/11/01 Python
使用python为mysql实现restful接口
2018/01/05 Python
python实现外卖信息管理系统
2018/01/11 Python
python3.6数独问题的解决
2019/01/21 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
logging level级别介绍
2020/02/21 Python
Python图像处理库PIL的ImageFont模块使用介绍
2020/02/26 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
函授本科毕业生自我鉴定
2013/10/16 职场文书
工商治理实习生的自我评价
2014/01/15 职场文书
公司领导班子对照材料
2014/08/18 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
武侯祠导游词
2015/02/04 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
家长会感言
2015/08/01 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android