AngularJS 讲解五, Factory ,Service , Provider
一. 首先说一下,为什么要引入Factory,Service和Provider这三个Service层。
1.因为我们不应该在controller层写入大量的业务逻辑和持久化数据,controller层越轻薄越好,业务逻辑和持久化数据应该放在Service层。
2.针对内存性能的考虑,controller会在需要的时候才初始化,不需要的话,就会被放弃。所以AngularJS会在刷新页面的时候,清空controller. 而永久保存的数据放在Service层,那么在不同的controller之间可以被调用。
二.AngularJS 提供了三种方法创建并注册自己的Service.
1). Factory
2). Service
3). Provider
三.对Factory,Service,Provider的详解
1).Factory 相当于创建对象,在对象里添加属性和方法,返回这个对象,然后在controller里便可直接用service对象的属性啦
例如:
<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8" /><script type="text/javascript" src="js/angular.js"></script><script type="text/javascript" src="js/demo1.js"></script>
</head>
<body data-ng-app="demoApp"><div data-ng-controller="demoController">title:<span data-ng-bind="title"></span></div>
</body>
</html>(function () {angular.module('demoApp', []);angular.module('demoApp').controller("demoController", function ($scope,demoFactory) {$scope.title = demoFactory.getTitle();});angular.module('demoApp').factory("demoFactory", function () {var _title = "ruby's test";var service = {};service.getTitle = function () {return _title;}return service;})
})();
2).Service 相当于是用new关键字来实例化的Service对象(相当于创建了一个构造器),因此只需要给this添加属性,然后由service返回this. 在controller层通过该service获得这个属性。
angular.module('demoApp').controller("demoController", function ($scope,demoService) {$scope.title = demoService.getTitle();});angular.module('demoApp').service('demoService', function () {var _title = "Ruby Test service";this.getTitle = function () {return _title;}});
3).Provider 是唯一一个能传到应用程序.config的服务。所以当想要在controller之前启用,先进行模块范围的配置(对provider的一部分属性值进行配置),就用provider
如果想要在controller控制器里直接调用provider的属性和方法 要放到$get里
<!DOCTYPE html>
<html>
<head><title></title><meta charset="utf-8" /><script type="text/javascript" src="js/angular.js"></script><script type="text/javascript" src="js/demo1.js"></script>
</head>
<body data-ng-app="demoApp"><div data-ng-controller="demoController">title:<span data-ng-bind="title"></span><br/>thingFromConfig:<span data-ng-bind="thingFromConfig"></span></div>
</body>
</html>angular.module('demoApp', []);
angular.module('demoApp').controller("demoController", function ($scope,demoProvider) {demoProvider.setTitle("provider service test");$scope.title = demoProvider.getTitle();$scope.thingFromConfig = demoProvider.thingOnConfig;});angular.module('demoApp').provider('demoProvider', function () {var _title = "";this.thingFromConfig = "";this.$get = function () {return {setTitle: function (t) {_title = t;},getTitle: function () {return _title;},thingOnConfig: this.thingFromConfig}}});angular.module('demoApp').config(function (demoProviderProvider) {demoProviderProvider.thingFromConfig = "Hello, this is a thing from configuration.";});
四.深入解析 AngularJs的service
首先了解一下$provide
AngularJs有个叫$provide的服务,这个服务可以创建供应商,我们的service都是通过供应商来定义的。
有六个个创建供应商的方法:
1.Factory
2.Service
3.Constant
4.value
5.provider
6.decorator(装饰器)
转载于:https://www.cnblogs.com/future-ruby/p/6197995.html
AngularJS 讲解五, Factory ,Service , Provider相关推荐
- angularjs 中 Factory,Service,Provider 之间的区别
本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行 ...
- Introduction to the Service Provider Interfaces--官方文档
地址:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html What Are Services? Services are unit ...
- LSP(Layered Service Provider)入门的基础知识概念
1.套接字 TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口. 套接字用(IP地址:端口号)表示. 它是网络通信过程中端点的抽象表示,包含进行网 ...
- 服务提供者框架(Service Provider Framework)
服务提供者框架是指:多个服务提供者实现一个服务,系统为客户提供多个实现, 并把它们从多个实现中解耦出来.服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性.如JDBC,JMS等就是服务提 ...
- Javascript教程:AngularJS的五个超酷特性
日期:2012-7-17 来源:GBin1.com AngularJS是一个超棒的javascript框架,不单单对于开发人员来说非常有吸引力,对于UI设计师来说也同样出色.在这篇教程中,我们将简单 ...
- java provider_Java SPI(Service Provider Interface)
//ServiceLoader实现了Iterable接口,可以遍历所有的服务实现者 public final class ServiceLoader implements Iterable{//查找配 ...
- Java中的SPI(Service Provider Interface介绍及示例
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一个服务 ...
- Java基础学习总结(145)——Java SPI(Service Provider Interface)简介
SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.一个服务(Service)通常指的是已知的接口或者抽象类,服务提供方就是对 ...
- smallworld 下的magik module 的logger和service provider
最近一直在研究gis方法的技术,研究最多的就是smallworld,对于smallworld的研究了1个月 有点心得就发上来给大家分享一下. 刚进来这个领域的时候知道 arcgis用的是比较多的,但我 ...
- service mysql k8s_Kubernetes/K8S基础使用方法总结【五】——Service
Service有userspace.iptables.ipvs三种工作模式,可在配置文件/etc/sysconfig/kubelet中添加配置参数KUBE_PROXY_MODE=ipvs来改变kube ...
最新文章
- Docker安装mysql容器
- Flash芯片(硬盘)与RAM芯片(内存)存储信息的区别!
- hive提交命令org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error parsing application ID:
- html登录后记住用户名,完成登录功能,用session记住用户名
- OpenTLD 未完成 - 虎头
- 怎么确保一个集合不能被修改
- 使用 VuePress 搭建一个自己的知识文档
- 关于php的字符串编码
- 代码也能“杀”虫:此虫,真虫非Bug也
- mac下使用brew安装java等应用
- 【2019-2020春学期】数据库作业18:第八章: 数据库编程(实验课大作业)
- flash cs6汉化成中文,附汉化包
- 致远互联的下一步:从“协同”到“门户”
- element表格头部换行
- 扫描二维码进入小程序超详细过程
- 小新想把百度搜索引擎改为edge
- php 浏览器打开excel文件夹里,php网页显示excel表格数据-phpexcel 读取excel里的数据并在页面显示出来...
- 安装mysql提示oxc000007b_重装win7系统黑屏提示oxc000007b怎么办
- memcpy函数详解
- mongodb持久化
热门文章
- java: 非法字符: ‘\ufeff‘、java: 需要class, interface或enum
- 回调函数是同步还是异步_[React] 4 - setState / 异步还是同步?
- Spring源码之bean的加载(三)从bean中获取对象
- [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
- 循环神经网络系列(一) RNN、双向RNN、深度RNN
- 梯度下降-单变量线性回归-理论+代码+解释
- 基于Pairwise排序学习的因子分解推荐算法
- LGP2046[NOI2010]海拔正确性证明
- 8.ps输出属性-----状态
- [转] Android SDK manager 无法获取更新版本列表