AngularJS服务service用法总结


Posted in Javascript onDecember 13, 2016

本文实例总结了AngularJS服务service用法。分享给大家供大家参考,具体如下:

引言

最近在项目中用到了关于AngularJS中的服务相关的知识,在起初学习这个东西的时候就了解到这个东西在项目中是经常被用到的,在angular中也是比较重要的一块,所以今天小编就总结一些关于service的知识。

认识Service

关于service我们一点都不陌生,不论实在c#中还是Java中我们经常会遇到service的概念,其实service的作用就是对外提供某种特定的功能,也就是我们经常说的“为了实现某个功能而调用哪个服务”是一样的道理,他们一般是一个独立的模块,ng服务是这样的定义的:

Angular services are singletons objects or functions that carry out specific tasks common to web apps.

1、它是一个单利对象或函数,对外提供特定的功能。

2、它与我们自己定义一个function然后在其他地方调用不同,因为服务被定义在一个模块中,所以它的作用范围是可以被我们来管理的,ng避免全局变量污染意识是非常强的。

自定义服务

在angular中为我们提供了三种不同的方式来实现自定义服务,他们分别是系统内置的$provider、module中的service和module中的factory,下面来看看如何使用这三种方式;

1)$provide的使用

Providers 是唯一一种你可以传进 .config() 函数的 service。当你想要在 service 对象启用之前,先进行模块范围的配置,那就应该用 provider

var m1 = angular.module('myApp', [], function ($provide) {
    $provide.provider('providerService01', function () {
      this.$get = function () {
        return {
          message: 'this is providerService01'
        }
      }
    })
    $provide.provider('providerService02', function () {
      this.$get = function () {
        var _name = '';
        var service = {};
        service.setName = function (name) {
          _name = name;
        }
        service.getName = function () {
          return _name
        }
        return service;
      }
    })
})
m1.controller('firstController', ['$scope', 'providerService01', 'providerService02', function ($scope, providerService01, providerService02) {
    console.log(providerService01);
    providerService02.setName("李四");
    $scope.name = providerService02.getName();
}])

我们在使用$provide的使用可以像上面这样直接在module中直接注入$provide,然后再module中依次定义多个服务,当然我们也可以利用config来完成服务的定义。

var m1=angular.module('myApp',[]);
m1.config(function($provide){
  $provide.provider('providerService01', function () {
    this.$get = function () {
      return {
        message: 'this is providerService011'
      }
    }
  });
  $provide.provider('providerService02', function () {
    this.$get = function () {
      var _name='';
      var service={};
      service.setName=function(name){
        _name=name;
      }
      service.getName=function(){
        return _name
      }
      return service;
    }
  });
})

上面这两种实现方式达到的效果是一样的,所以我们在使用的时候可以任意选择一种来实现。

2)factory的使用

Factory方法直接把一个函数当成一个对象的$get 方法可以直接返回字符串,用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把 service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过 factory 使用了。

var m1 = angular.module('myApp', [], function ($provide) {
  $provide.factory('factoryService01',function(){
    return{
      message:'this is providerServices01'
    }
  })
});

factory的使用比$provide的使用简单一些,可以在factory直接返回已给对象,不在使用$get来实现对象的返回。并且$factory和$provide不仅仅可以返回一个对象还可以返回一个任意的字符串。

3)service的使用

Service 是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后 service 返回"this"。你把service 传进 controller 之后,在 controller 里 "this" 上的属性 就可以通过 service 来使用了

$provide.service('service01',function(){
    return{
      message:'this is providerServices01'
    }
})

service和factory的使用是非常相似的,但是service是不能返回字符串的,而factory既可以返回对象也可以返回任意的字符串。

三者的区别:provider需要借助$get来实现,而其余的两者都不需要。series不能返回字符串,而其他的两个都可以返回。

服务之间的依赖关系

我们在实现某个功能的时候也许需要多个服务相互依赖才可以完成,那么对于服务之间的关系我们就需要来管理,例如我们在完成一个数据验证的功能,这是在jsFiddle中找的一个非常简单的小例子

var app = angular.module('MyApp', []);
app.controller('testC3',function($scope,validate){
  $scope.validateData = validate;
});
app.factory('remoteData',function(){
  var data = {name:'n',value:'v'};
  return data;
});
app.factory('validate',function(remoteData){
  return function(){
    if(remoteData.name=='n'){
      alert('验证通过');
    }
  };
});

服务validate是来验证数据是否合法的功能,但是它需要依赖另外一个服务remoteData来获得数据,但是在factory的参数中,我们可以直接传入服务remoteData,ng的依赖注入机制便帮我们做好了其他工作。不过一定要保证这个参数的名称与服务名称一致,ng是根据名称来识别的。若参数的名次与服务名称不一致,你就必须显示的声明一下,方式如下:

app.factory('validate',['remoteData',function(remoteDataService){
  return function(){
    if(remoteDataService.name=='n'){
      alert('验证通过');
    }
  };
}]);

小结

以上是小编在学习angularJS服务的一些总结,这些都是入门的知识,在这和大家分享一下,如果想要对服务有更深层的理解还需要我们在项目中好好的研究。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
javascript常见操作汇总
Sep 03 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
Javascript中浏览器窗口的基本操作总结
Aug 18 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
js编写简单的计时器功能
Jul 15 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 jQuery
微信小程序如何连接Java后台
Aug 08 Javascript
Vue.js中用v-bind绑定class的注意事项
Dec 13 #Javascript
AngularJS中的Promise详细介绍及实例代码
Dec 13 #Javascript
JS中事件冒泡和事件捕获介绍
Dec 13 #Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 #Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 #Javascript
浅析Jquery操作select
Dec 13 #Javascript
Vue.js使用v-show和v-if的注意事项
Dec 13 #Javascript
You might like
php仿ZOL分页类代码
2008/10/02 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Django框架中的对象列表视图使用示例
2015/07/21 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
python 判断网络连通的实现方法
2018/04/22 Python
详解python读取image
2019/04/03 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
自荐信范文
2013/12/10 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android