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 相关文章推荐
js常用函数 不错
Sep 08 Javascript
jquery 图片上传按比例预览插件集合
May 28 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
AngularJS基础 ng-mouseover 指令简单示例
Aug 02 Javascript
jQuery Masonry瀑布流布局神器使用详解
May 25 jQuery
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
Nov 02 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
javascript异步编程的六种方式总结
May 17 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
微信小程序一周时间表功能实现
Oct 17 Javascript
node koa2 ssr项目搭建的方法步骤
Dec 11 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/12/14 PHP
浅析php工厂模式
2014/11/25 PHP
php+mysql数据库查询实例
2015/01/21 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
jsTree使用记录实例
2016/12/01 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
windows下安装python paramiko模块的代码
2013/02/10 Python
介绍Python中的文档测试模块
2015/04/28 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
校运会入场式解说词
2014/02/10 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
购房个人委托书范本
2014/10/11 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书