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 相关文章推荐
jQuery 打造动态下滑菜单实现说明
Apr 15 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
使用Plupload实现直接上传附件至七牛云存储
Dec 26 Javascript
12行javascript代码绘制一个八卦图
Apr 02 Javascript
js获取数组的最后一个元素
Apr 14 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
浅谈通过JS拦截 pushState和replaceState事件
Jul 21 Javascript
vue-cli3.0 环境变量与模式配置方法
Nov 08 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
Apr 17 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中的内存管理问题
2011/08/31 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
深入解析php之sphinx
2013/05/15 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
JS不完全国际化&amp;本地化手册 之 理论篇
2016/09/27 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
利用js canvas实现五子棋游戏
2020/10/11 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
实习协议书范本
2014/04/22 职场文书
安全生产月宣传标语
2014/10/06 职场文书
工作失误检讨书
2015/01/26 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
sql注入报错之注入原理实例解析
2022/06/10 MySQL