详解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 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
js文件中调用js的实现方法小结
Oct 23 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
js用闭包遍历树状数组的方法
Mar 19 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
js+html5实现canvas绘制简单矩形的方法
Jun 05 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
javascript实现检验的各种规则
Jul 31 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
Jan 15 Javascript
微信小程序监听用户登录事件的实现方法
Nov 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
js获取当前select 元素值的代码
2010/04/19 Javascript
jQuery 工具函数学习资料
2010/04/29 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
AngularJS快速入门
2015/04/02 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
JavaScript实现时间表动态效果
2017/07/15 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
Python Socket编程之多线程聊天室
2018/07/28 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
美国渔具店:FishUSA
2019/08/07 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
什么是Web Service?
2012/07/25 面试题
学生个人的自我评价分享
2013/11/05 职场文书
纠风工作实施方案
2014/03/15 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python