《AngularJS》------自定义服务 provider、service、factory

2024-08-27 20:48

本文主要是介绍《AngularJS》------自定义服务 provider、service、factory,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    在AngularJS中,我们经常将通用的业务逻辑封装在服务里面,这样一来,不仅减少了代码量,而且使出错率也降低了,代码的易读性也提高了,所以说,我们经常用到了业务逻辑,或者是说持久化数据化操作应该放在自定义的服务里面,而不是Controller里面。下面我说一下provider、service、factory的定义方式还有主要区别。

    1、provider

    Providers是唯一 一种你可以传进 .config() 函数的service。当你想要在 service对象启用之前,先进行模块范围的配置,那就应该用 provider。当我们定义provider时候,我们还必须将返回对象放在this.$get=function(){}中。代码如下:

var myModule = angular.module("HelloAngular", []);
myModule.config(['providerServiceProvider',function(providerServiceProvider){providerServiceProvider.name='这是通过外部config传入的参数名字:大哥你好啊!!!!!!';
}])myModule.provider('providerService',function(){this.name='';this.$get=function(){var _name='';var serverce={};var that =this;serverce.setName=function(name){_name=name;}serverce.getName=function(){return _name;}serverce.getConfigName=function(){return that.name;}return serverce;}
});

    定义个Controller调用该服务

myModule.controller("helloAngular", ['$scope','service01','factory01','providerService',function HelloAngular($scope,service01,factory01,providerService) {providerService.setName("这是providerService服务设置的名字:美女,今晚约吗?");console.log(providerService.getName());console.log(providerService.getConfigName());}
]);

    效果图:

 

     2、service

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

myModule.service('service01',function(){var _name='';this.setName=function(name){_name=name;}this.getName=function(){return _name;};});

    Controller可以这么写

myModule.controller("helloAngular", ['$scope','service01',function HelloAngular($scope,service01) {service01.setName("这是service01服务设置的名字:美女,今晚约吗?");console.log(service01.getName());}
]);

    3、factory

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

    factory直接返回字符串,其它的两个服务不行。

myModule.factory('factory01',function(){return '你大爷的';
});

    factory定义对象,然后在对象上定义各种属性,各种方法。

myModule.factory('factory01',function(){var _name='';var serverce={};var that =this;serverce.setName=function(name){_name=name;}serverce.getName=function(){return _name;}serverce.getConfigName=function(){return that.name;}return serverce;
});

    Controller的调用我就不用再写了吧,和上面一样,相比较三种方式,定义服务的方法大同小异,只是provider方法稍微复杂了点。

     service方法与factory相比,service可以不用生命对象,它直接将某些属性和方法绑定在this上就可以,但是它不可以直接返回字符串,而factory定义的服务必须在里面定义一个对象,将某些公用的方法或者属性绑定在此对象上,然后Return回去。这就是我总结的Angular中三种自定义服务的区别,其实这三种服务还有其它定义方式,可以通过config定义,也可以直接在声明module时当第三个参数传入进去使用,本人认为使用module方法简单,所以今天只是总结了这种方法。

这篇关于《AngularJS》------自定义服务 provider、service、factory的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (