详解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 相关文章推荐
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
Jan 08 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
深入理解js中this的用法
May 28 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
JS仿hao123导航页面图片轮播效果
Sep 01 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
Angular学习教程之RouterLink花式跳转
May 03 Javascript
JQuery扩展对象方法操作示例
Aug 21 jQuery
Vue2.X和Vue3.0数据响应原理变化的区别
Nov 07 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
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
js实现的切换面板实例代码
2013/06/17 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
js String.prototype.trim字符去前后空格的扩展
2020/08/23 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
python装饰器的特性原理详解
2019/12/25 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
大三学习计划书范文
2014/05/02 职场文书
给学校建议书范文
2014/05/13 职场文书
希特勒的演讲稿
2014/05/23 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
荆州古城导游词
2015/02/06 职场文书
2015入党个人自传范文
2015/06/26 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python
Elasticsearch 配置详解
2022/04/19 Java/Android
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技