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 相关文章推荐
重定向实现代码
Nov 20 Javascript
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
javascript object array方法使用详解
Dec 03 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
js动态创建标签示例代码
Jun 09 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 Javascript
vue中使用腾讯云Im的示例
Oct 23 Javascript
类和原型的设计模式之复制与委托差异
Jul 07 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
合作指挥官:孟斯克
2020/03/16 星际争霸
php统计数组元素个数的方法
2015/07/02 PHP
php实现异步数据调用的方法
2015/12/24 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
python实现保存网页到本地示例
2014/03/16 Python
Python利用ansible分发处理任务
2015/08/04 Python
python中的字典使用分享
2016/07/31 Python
详细介绍Python的鸭子类型
2016/09/12 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
python 基于opencv去除图片阴影
2021/01/26 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
饭店工作计划书
2014/01/10 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
党支部承诺书
2015/01/20 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
六年级作文之自救
2019/12/19 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫