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 相关文章推荐
JQUERY 对象与DOM对象之两者相互间的转换
Apr 27 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
Oct 12 Javascript
jQuery实现二维码扫描功能
Jan 09 Javascript
JavaScript基础之AJAX简单的小demo
Jan 29 Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
Oct 20 Javascript
vue实现拖拽交换位置
Apr 07 Vue.js
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 静态变量的初始化
2009/11/15 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
javascript学习网址备忘
2007/05/29 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
JS关闭窗口时产生的事件及用法示例
2016/08/20 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
详解Django中的过滤器
2015/07/16 Python
12步教你理解Python装饰器
2016/02/25 Python
python购物车程序简单代码
2018/04/18 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
生日派对邀请函
2014/01/13 职场文书
环保倡议书
2014/04/14 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
郭明义电影观后感
2015/06/08 职场文书
运动会报道稿大全
2015/07/23 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书