angularJS学习小结——service

2024-08-26 15:18

本文主要是介绍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学习小结——service的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108926

相关文章

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP