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 相关文章推荐
关于document.cookie的使用javascript
Apr 11 Javascript
js 效率组装字符串 StringBuffer
Dec 23 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 Javascript
javaScript同意等待代码实现心得
Jan 01 Javascript
jquery $.trim()方法使用介绍
May 21 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
Mar 31 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
bootstrap suggest搜索建议插件使用详解
Mar 25 Javascript
使用webpack4编译并压缩ES6代码的方法示例
Apr 24 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
Oct 12 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
Nov 24 Javascript
Javascript Symbol原理及使用方法解析
Oct 22 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中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
jQuery总体架构的理解分析
2011/03/07 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
前端性能优化及技巧
2016/05/06 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
JavaScript实现星星等级评价功能
2017/03/22 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
JS实现简单日历特效
2020/01/03 Javascript
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
中英文自我评价语句
2013/12/20 职场文书
小学运动会表扬稿
2014/01/19 职场文书
交通事故私了协议书
2014/04/16 职场文书
公司承诺书格式
2014/05/21 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
西安兵马俑导游词
2015/02/02 职场文书
实习推荐信格式模板
2015/03/27 职场文书
永远是春天观后感
2015/06/12 职场文书
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android
Python面试不修改数组找出重复的数字
2022/05/20 Python
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript