详解Angular中的自定义服务Service、Provider以及Factory


Posted in Javascript onApril 22, 2017

背景来源于前段时间的一场面试,面试官看着我Angular控制器中添加各种功能重复的方法,脸都发绿了,不过还是耐心地跟我指出提高Angular代码复用性需要Service、Provider和Factory三种复用性很高的方法,遂习之,以下是我的学习成果:

先说说Factory:

通过注册.factory('my注册名',方法()),返回一个对象,你就能在控制器中引入这个方法并访问这个对象:
例子:

<!-- factory模式 -->
  <div ng-controller="theFactoryCtrl">
    <h3>Factory模式</h3>
    <ul>
      <li ng-repeat="i in names">
        {{i}}
      </li>
    </ul>

  </div>

JS代码:

/*工厂模式,注入参数中调用的是这个函数里的返回值*/
  app.factory("myFactory",function(){

    var args = arguments;
    var obj = {}

    obj.exec = function(){
      var arr = [];
      for(let i = 0; i<arguments.length; i++){
        arr.push(arguments[i]);
      }
      return arr;
    }
    return obj;
  })
app.controller("theFactoryCtrl",function ($scope,myFactory) {

    $scope.names = myFactory.exec("张三的歌","赵四的舞","老王贼六");

  })

效果:

详解Angular中的自定义服务Service、Provider以及Factory

Service:

在service使用构造函数的方法去用它,在控制器中是以new的方式引入,所以可以调用service中定义的属性

HTML:

<!-- service模式 -->
  <div ng-controller="theServiceCtrl">
    <h3>Service模式</h3>
    <p>prop:{{prop}}</p>
    <p>num:{{num}}</p>
  </div>

JS:

app.controller("theServiceCtrl",function($scope,myService){
    $scope.prop = myService.prop("呵呵");
    $scope.num = myService.num;
  })
/*Service是new出来的,所以可以直接调用里面的属性*/
  app.service("myService",function(){
    this.num = Math.floor(Math.random()*10);//0到10的随机数
    this.prop = function(arg){
      return arg;
    };
  })

效果:

详解Angular中的自定义服务Service、Provider以及Factory

Provider:

如果你想在创建服务之前先对服务进行配置,那么你需要provider,因为provider可以通过定义config,并在$get中访问config
HTML:

<!-- provider模式 -->
  <div ng-controller="theProviderCtrl">
    <h3>Provider模式</h3>
    <p>姓名:{{info.name}}</p>
    <p>部队:{{info.squad}}</p>
    <p>职务:{{info.role}}</p>
  </div>

JS:

/*使用$get方法关联对应的config*/
  app.provider("myProvider",function(){

    this.$get = function(){

      return {
        name : "朱子明",
        squad : "八路军386旅独立团",
        role : this.roleSet

      }
    }

  })
  /*名字必须符合规范:xxxxxxProvider*/
  app.config(function(myProviderProvider){
    myProviderProvider.roleSet = "保卫干事"
  })
app.controller("theProviderCtrl",function($scope,myProvider){
    $scope.info = {
      name : myProvider.name,
      squad : myProvider.squad,
      role : myProvider.role

    }
  })

效果:

详解Angular中的自定义服务Service、Provider以及Factory

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
对textarea框的代码调试,而且功能上使用非常方便,酷
Jun 30 Javascript
JQuery 简便实现页面元素数据验证功能
Mar 24 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
js将long日期格式转换为标准日期格式实现思路
Apr 07 Javascript
javascript记录文本框内文字个数检测文字个数变化
Oct 14 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
js 获取经纬度的实现方法
Jun 20 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 jQuery
Vue手把手教你撸一个 beforeEnter 钩子函数
Apr 24 Javascript
javascript中call,apply,bind的区别详解
Dec 11 Javascript
Ionic2调用本地SQlite实例
Apr 22 #Javascript
ionic+AngularJs实现获取验证码倒计时按钮
Apr 22 #Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 #Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 #Javascript
AngularJS的脏检查深入分析
Apr 22 #Javascript
在node中如何使用 ES6
Apr 22 #Javascript
JS实现异步上传压缩图片
Apr 22 #Javascript
You might like
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
js null undefined 空区别说明
2010/06/13 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
js命名空间写法示例
2015/12/18 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python socket编程实例详解
2015/05/27 Python
Python编写登陆接口的方法
2017/07/10 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
Hotels.com英国:全球领先的酒店住宿提供商
2019/01/24 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
企业治理工作自我评价
2013/09/26 职场文书
总经理工作职责范文
2014/03/14 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
群众路线个人整改措施
2014/10/24 职场文书
行政助理岗位职责
2015/02/10 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
创业计划书之面包店
2019/09/17 职场文书
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
Windows server 2016服务器基本设置
2022/08/14 Servers