AngularJS基于factory创建自定义服务的方法详解


Posted in Javascript onMay 25, 2017

本文实例讲述了AngularJS基于factory创建自定义服务的方法。分享给大家供大家参考,具体如下:

为什么要创建自定义服务?

很简单,不想让控制器显得过于“臃肿”,而且服务可复用。针对性强,每个服务对应不同的功能。

这里介绍如何使用factory创建自定义服务,并且使用他。

例子1:

<!--HTML-->
<div ng-controller="showTheName">
  <h1 ng-bind="name"></h1>
</div>
/*js*/
var app = angular.module("routingDemoApp",[]);
app.factory("showName",function(){
  var NameFactory = {};
  NameFactory.name = "张三";
  return NameFactory;
});
app.controller("showTheName",function($scope,showName){
  $scope.name = showName.name;
});

使用factroy来创建一个服务和创建一个控制器非常像,只是创建服务需要返回这个服务的对象。这里的对象就是NameFactory 。一般的写法是在函数的一开始就创建一个变量对象,而后在进行对象里面属性以及方法的设置,最后返回这个对象即可。

在控制器使用自定义的服务与使用AngularJS自带的服务几乎一样,只是名字的前面没有美元($)符号。在注入了自定义的服务后,控制器中就可以随意的使用该控制器返回的对象的属性和方法了。

自定义服务还有个更强大的玩法,就是在创建自定义服务的同时将已经创建好的服务注入。以上一篇博文的基础为例,使用自定义服务来实现读取AJAX文件。(JSON文件可参考前面一篇《AngularJS读取JSON及XML文件的方法》,这里不给出了)

<!--html-->
<div class="panel panel-default" ng-controller="AjaxJson">
  <div class="panel-body">
    <table class="table table-striped table-hover">
      <thead>
      <tr>
        <td>名</td>
        <td>种类</td>
        <td>价格</td>
        <td>保质期</td>
      </tr>
      </thead>
      <tbody>
      <tr ng-hide="products.length">
        <td colspan="4" class="text-center">没有数据</td>
      </tr>
      <tr ng-repeat="item in products">
        <td ng-bind="item.name"></td>
        <td ng-bind="item.category"></td>
        <td ng-bind="item.price"></td>
        <td ng-bind="item.expiry"></td>
      </tr>
      </tbody>
    </table>
    <p><button ng-click="LoadJson()">加载JSON数据</button></p>
  </div>
</div>
/*JS*/
app.factory("loadJSON",function($http,$q){
  var loadJson ={};
  loadJson.loadjson = function(){
    var d = $q.defer();
    $http({
      url:"json.json",
      method:"GET"
    })
      .success(function(response){
      d.resolve(response);
    })
      .error(function(){
        d.reject(alert("出错"));
      });
    return d.promise;
  };
  return loadJson;
});
app.controller("AjaxJson",function($scope,loadJSON){
  $scope.LoadJson = function () {
    loadJSON.loadjson().then(function(data){
      $scope.products = data;
    },function(){
      alert("出错");
    })
  }
});

步骤如下:

1)将$http,$q 注入到匿名函数中。
2)创建一个变量对象,命名为loadJson。
3)在该对象中创建一个方法,命名为loadjson()。
4)创建一个变量d,赋予它$q.difer()方法。
5)使用http({})创建一个promise对象,并返回该promise对象。
6)返回ladJson对象。服务创建完毕。
7)在控制器中注入该服务,使用then()方法对自定义服务返回的承诺进行操作。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
Sep 21 Javascript
javascript 获取图片尺寸及放大图片
Sep 04 Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
js防止表单重复提交的两种方法
Sep 30 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
JS简单实现禁止访问某个页面的方法
Sep 13 Javascript
深入探究node之Transform
Jul 20 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
原生js实现轮播图特效
May 04 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
AngularJS读取JSON及XML文件的方法示例
May 25 #Javascript
bootstrap+jQuery实现的动态进度条功能示例
May 25 #jQuery
基于VUE选择上传图片并页面显示(图片可删除)
May 25 #Javascript
jQuery滚动插件scrollable.js用法分析
May 25 #jQuery
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 #Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
May 25 #Javascript
vue-router实现webApp切换页面动画效果代码
May 25 #Javascript
You might like
基于php-fpm 参数的深入理解
2013/06/03 PHP
php cookie 详解使用实例
2016/11/03 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
Python2.x与Python3.x的区别
2016/01/14 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
学习自我鉴定
2014/02/01 职场文书
法学专业自我鉴定
2014/02/05 职场文书
读群众路线心得体会
2014/03/07 职场文书
节约用水倡议书
2014/04/16 职场文书
活动总结怎么写啊
2014/05/07 职场文书
房地产推广策划方案
2014/05/19 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
黄埔军校观后感
2015/06/10 职场文书
小学生暑假安全公约
2015/07/14 职场文书
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电