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 原型继承
Dec 26 Javascript
ECMAScript6块级作用域及新变量声明(let)
Jun 12 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
Oct 12 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
canvas雪花效果核心代码分享
Feb 19 Javascript
angular4 如何在全局设置路由跳转动画的方法
Aug 30 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
VUE 全局变量的几种实现方式
Aug 22 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
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生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
多广告投放代码 推荐
2006/11/13 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
Python中装饰器的一个妙用
2015/02/08 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python中class的定义及使用教程
2019/09/18 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
python Tornado框架的使用示例
2020/10/19 Python
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
英文翻译的自我评价语句
2013/10/04 职场文书
自我鉴定模板
2013/10/29 职场文书
《争吵》教学反思
2014/02/15 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
小学庆六一活动总结
2014/08/28 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
导游词之天下银坑景区
2019/11/21 职场文书