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基础语法让人疑惑的地方小结
May 23 Javascript
禁止你的左键复制实用技巧
Jan 04 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
Oct 12 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
浅谈jquery点击label触发2次的问题
Jun 12 Javascript
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 Javascript
详解利用 Express 托管静态文件的方法
Sep 18 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
JavaScript剩余操作符Rest Operator详解
Jul 20 Javascript
使用vue实现一个电子签名组件的示例代码
Jan 06 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实现图片以base64显示的方法
2016/10/13 PHP
PHP框架laravel的.env文件配置教程
2017/06/07 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
layui table 参数设置方法
2018/08/14 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
R vs. Python 数据分析中谁与争锋?
2017/10/18 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
个人简历自荐信
2013/12/05 职场文书
单位工作证明范文
2014/09/14 职场文书
运动会广播稿200字
2014/10/18 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
python 提取html文本的方法
2021/05/20 Python
浅谈redis整数集为什么不能降级
2021/07/25 Redis
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
python中redis包操作数据库的教程
2022/04/19 Python