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 相关文章推荐
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
js 获取服务器控件值的代码
Mar 05 Javascript
js获取当前地址 JS获取当前URL的示例代码
Feb 26 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
JS模拟按钮点击功能的方法
Dec 22 Javascript
深入分析Javascript事件代理
Jan 30 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
Aug 05 Javascript
详解如何在vue-cli中使用vuex
Aug 07 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
vue-router命名视图的使用讲解
Jan 19 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
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仿盗链代码
2012/06/03 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
关于this和self的使用说明
2010/08/01 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
2011/10/21 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
python实现的重启关机程序实例
2014/08/21 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python创建和删除目录的方法
2015/04/29 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
python编写简单爬虫资料汇总
2016/03/22 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
python入门教程之识别验证码
2017/03/04 Python
python logging模块的使用总结
2019/07/09 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
Python使用Tkinter实现滚动抽奖器效果
2020/01/06 Python
python time()的实例用法
2020/11/03 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
教师对学生的寄语
2014/04/03 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
家长给老师的感谢信
2015/01/20 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
java版 简单三子棋游戏
2022/05/04 Java/Android