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 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
js获取html文件的思路及示例
Sep 17 Javascript
css样式标签和js语法属性区别
Nov 06 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
Dec 13 Javascript
JavaScript设计模式之代理模式介绍
Dec 28 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
Jan 09 Javascript
JavaScript实现将UPC转换成ISBN的方法
May 26 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
jQuery四种选择器使用及示例
Jun 05 Javascript
详解vue父子组件间传值(props)
Jun 29 Javascript
关于vue项目中搜索节流的实现代码
Sep 17 Javascript
js+audio实现音乐播放器
Sep 13 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字符串 ==比较运算符的副作用
2009/10/21 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
JavaScript闭包详解
2015/02/02 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python内存管理分析
2015/04/08 Python
Python 12306抢火车票脚本
2018/02/07 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
python中使用np.delete()的实例方法
2021/02/01 Python
Delphi工程师笔试题
2013/09/21 面试题
写给女朋友的检讨书
2014/01/28 职场文书
树转促学习心得体会
2014/09/10 职场文书
求职简历自我评价2015
2015/03/10 职场文书
2015年助残日活动总结
2015/03/27 职场文书
高三化学教学反思
2016/02/22 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang