详解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 相关文章推荐
基于Jquery的实现回车键Enter切换焦点
Sep 14 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
Jun 20 Javascript
简单选项卡 js和jquery制作方法分享
Feb 26 Javascript
javascript面向对象之定义成员方法实例分析
Jan 13 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
AngularJS ng-bind-html 指令详解及实例代码
Jul 30 Javascript
针对JavaScript中this指向的简单理解
Aug 26 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
mpvue性能优化实战技巧(小结)
Apr 17 Javascript
JS实现可以用键盘方向键控制的动画
Dec 11 Javascript
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
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
关于php mvc开发模式的感想
2011/06/28 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
销售会计工作职责
2013/12/02 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
幼儿教师思想汇报
2014/01/10 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
个人自我评价和职业目标
2014/01/24 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
党员服务承诺书
2014/05/28 职场文书
2015年实习单位评语
2015/03/25 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android