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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
js 获取和设置css3 属性值的实现方法
May 06 Javascript
IE中鼠标经过option触发mouseout的解决方法
Jan 29 Javascript
jQuery+ajax实现实用的点赞插件代码
Jul 06 Javascript
vue-dialog的弹出层组件
May 25 Javascript
原生JS实现九宫格抽奖效果
Apr 01 Javascript
实例详解JSON取值(key是中文或者数字)方式
Aug 24 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
探秘vue-rx 2.0(推荐)
Sep 21 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
Vue 用Vant实现时间选择器的示例代码
Oct 25 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 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
DedeCms模板安装/制作概述
2007/03/11 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
拖动时防止选中
2017/02/03 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
python利用Guetzli批量压缩图片
2017/03/23 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
python八皇后问题的解决方法
2018/09/27 Python
Python中dict和set的用法讲解
2019/03/28 Python
Python向excel中写入数据的方法
2019/05/05 Python
python中time库的实例使用方法
2019/10/31 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
美国在线家具网站:GDFStudio
2021/03/13 全球购物
2014年社区植树节活动方案
2014/02/28 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
英语系毕业生求职信
2014/07/13 职场文书
2014年业务工作总结
2014/11/17 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
利用Python多线程实现图片下载器
2022/03/25 Python