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 相关文章推荐
FF IE兼容性的修改小结
Sep 02 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
JavaScript中document对象使用详解
Jan 06 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
JSP基于Bootstrap分页显示实例解析
Jun 12 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
微信小程序的生命周期的详解
Oct 19 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
Sep 20 Javascript
vue模式history下在iis中配置流程
Apr 17 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
Sep 27 Javascript
Vuex的实战使用详解
Oct 31 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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
python查看数据类型的方法
2019/10/12 Python
python元组的概念知识点
2019/11/19 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
js实现弹框效果
2021/03/24 Javascript
通信生自我鉴定
2014/01/18 职场文书
家长寄语大全
2014/04/02 职场文书
活动总结书
2014/05/08 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
合理化建议书范文
2015/09/14 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL