详解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.extend()、jQuery.fn.extend()扩展方法示例详解
May 08 Javascript
Javascript学习指南
Dec 01 Javascript
js获取form的方法
May 06 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
JS验证字符串功能
Feb 22 Javascript
Vue 滚动行为的具体使用方法
Sep 13 Javascript
AngularJS中controller控制器继承的使用方法
Nov 03 Javascript
vue使用v-for实现hover点击效果
Sep 29 Javascript
小程序实现单选多选功能
Nov 04 Javascript
vue中使用rem布局代码详解
Oct 30 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
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采集腾讯微博的实现代码
2012/01/19 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
python字符串替换re.sub()方法解析
2019/09/18 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
django自带的权限管理Permission用法说明
2020/05/13 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
植物选择:Botanic Choice
2017/02/15 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
学习党章思想汇报
2014/01/07 职场文书
护理自荐信
2019/05/14 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
MYSQL 表的全面总结
2021/11/11 MySQL
实例详解Python的进程,线程和协程
2022/03/13 Python