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 相关文章推荐
javascript之AJAX框架使用说明
Apr 24 Javascript
JS无限树状列表实现代码
Jan 11 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
Jul 16 Javascript
JS.getTextContent(element,preformatted)使用介绍
Sep 21 Javascript
jqueryMobile使用示例分享
Jan 12 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
Oct 30 Javascript
原生JS轮播图插件
Feb 09 Javascript
微信小程序组件之srcoll-view的详解
Oct 19 Javascript
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 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和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
php自动载入类用法实例分析
2016/06/24 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
jQuery技巧总结
2011/01/01 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
python读取Kafka实例
2019/12/23 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
Django用户身份验证完成示例代码
2020/04/03 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
初二政治教学反思
2014/01/12 职场文书
上课玩手机检讨书
2014/02/08 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
校本培训个人总结
2015/02/28 职场文书
员工聘用合同范本
2015/09/21 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python