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 相关文章推荐
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 Javascript
JS实现拖动示例代码
Nov 01 Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 Javascript
JS作用域深度解析
Dec 29 Javascript
jQuery validate 验证radio实例
Mar 01 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
Jun 14 Javascript
详解vue中axios的封装
Jul 18 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
Jul 27 Javascript
vue实现一拉到底的滑动验证
Jul 25 Javascript
vue的webcamjs集成方式
Nov 16 Javascript
layui使用及简单的三级联动实现教程
Dec 01 Javascript
vue keep-alive的简单总结
Jan 25 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
PR值查询 | PageRank 查询
2006/12/20 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php设计模式小结
2013/02/15 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
2020/06/23 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
Python for循环及基础用法详解
2019/11/08 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Python实现word2Vec model过程解析
2019/12/16 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
Python中的With语句的使用及原理
2020/07/29 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
请说出几个常用的异常类
2013/01/08 面试题
Delphi软件工程师试题
2013/01/29 面试题
创业计划书的写作技巧及要点
2014/01/31 职场文书
大学生创业策划书
2014/02/02 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫