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 相关文章推荐
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
基于jquery的blockui插件显示弹出层
Apr 14 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
超简单的Vue.js环境搭建教程
Mar 17 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
微信小程序封装自定义弹窗的实现代码
May 08 Javascript
详解ES6 Promise的生命周期和创建
Aug 18 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
php扩展开发入门demo示例
2019/09/23 PHP
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[01:07:11]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
在Python的Django框架中加载模版的方法
2015/07/16 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
详解Python self 参数
2019/08/30 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
六一儿童节活动策划方案
2014/01/27 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
社区班子对照检查材料
2014/08/27 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
集结号观后感
2015/06/08 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
redis实现排行榜功能
2021/05/24 Redis
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript