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 相关文章推荐
js保留两位小数使用toFixed实现
Jul 29 Javascript
jQuery实现预加载图片的方法
Mar 17 Javascript
浅谈javascript属性onresize
Apr 20 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
Apr 13 Javascript
AngularJS自定义指令之复制指令实现方法
May 18 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
layui radio性别单选框赋值方法
Aug 15 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
Dec 20 Javascript
JS script脚本中async和defer区别详解
Jun 24 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
弹出模态框modal的实现方法及实例
2017/09/19 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
显示、隐藏密码
2006/07/01 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
vue实现分页加载效果
2019/12/24 Javascript
react 生命周期实例分析
2020/05/18 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
详解Python字符串对象的实现
2015/12/24 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
python的变量与赋值详细分析
2017/11/08 Python
python的unittest测试类代码实例
2017/12/07 Python
python一键去抖音视频水印工具
2018/09/14 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
linux面试相关问题
2012/08/11 面试题
财务管理职业生涯规划范文
2013/12/27 职场文书
致400米运动员广播稿
2014/02/07 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电