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 相关文章推荐
prototype 源码中文说明之 prototype.js
Sep 22 Javascript
JavaScript事件列表解说
Dec 22 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
使用CSS样式position:fixed水平滚动的方法
Feb 19 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
JQuery鼠标移到小图显示大图效果的方法
Jun 10 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
原生js实现手风琴功能(支持横纵向调用)
Jan 13 Javascript
详解小程序设置缓存并且不覆盖原有数据
Apr 15 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分页显示制作详细讲解
2006/10/09 PHP
php中的观察者模式
2010/03/24 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
checkbox使用示例
2013/08/23 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
几种响应式文字详解
2017/05/19 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
python 美化输出信息的实例
2018/10/15 Python
Python实现仿射密码的思路详解
2020/04/23 Python
python的数学算法函数及公式用法
2020/11/18 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
SQL面试题
2013/04/30 面试题
关于爱情的广播稿
2014/01/16 职场文书
服装店营销方案
2014/03/10 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
爱国主义主题班会
2015/08/14 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
CentOS安装Nginx并部署vue
2022/04/12 Servers