一. 首先说一下,为什么要引入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相关推荐

  1. angularjs 中 Factory,Service,Provider 之间的区别

    本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行 ...

  2. Introduction to the Service Provider Interfaces--官方文档

    地址:https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html What Are Services? Services are unit ...

  3. LSP(Layered Service Provider)入门的基础知识概念

    1.套接字 TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口. 套接字用(IP地址:端口号)表示. 它是网络通信过程中端点的抽象表示,包含进行网 ...

  4. 服务提供者框架(Service Provider Framework)

    服务提供者框架是指:多个服务提供者实现一个服务,系统为客户提供多个实现, 并把它们从多个实现中解耦出来.服务提供者的改变对它们的客户端是透明的,这样提供了更好的可扩展性.如JDBC,JMS等就是服务提 ...

  5. Javascript教程:AngularJS的五个超酷特性

    日期:2012-7-17  来源:GBin1.com AngularJS是一个超棒的javascript框架,不单单对于开发人员来说非常有吸引力,对于UI设计师来说也同样出色.在这篇教程中,我们将简单 ...

  6. java provider_Java SPI(Service Provider Interface)

    //ServiceLoader实现了Iterable接口,可以遍历所有的服务实现者 public final class ServiceLoader implements Iterable{//查找配 ...

  7. Java中的SPI(Service Provider Interface介绍及示例

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一个服务 ...

  8. Java基础学习总结(145)——Java SPI(Service Provider Interface)简介

    SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.一个服务(Service)通常指的是已知的接口或者抽象类,服务提供方就是对 ...

  9. smallworld 下的magik module 的logger和service provider

    最近一直在研究gis方法的技术,研究最多的就是smallworld,对于smallworld的研究了1个月 有点心得就发上来给大家分享一下. 刚进来这个领域的时候知道 arcgis用的是比较多的,但我 ...

  10. service mysql k8s_Kubernetes/K8S基础使用方法总结【五】——Service

    Service有userspace.iptables.ipvs三种工作模式,可在配置文件/etc/sysconfig/kubelet中添加配置参数KUBE_PROXY_MODE=ipvs来改变kube ...

最新文章

  1. Docker安装mysql容器
  2. Flash芯片(硬盘)与RAM芯片(内存)存储信息的区别!
  3. hive提交命令org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Error parsing application ID:
  4. html登录后记住用户名,完成登录功能,用session记住用户名
  5. OpenTLD 未完成 - 虎头
  6. 怎么确保一个集合不能被修改
  7. 使用 VuePress 搭建一个自己的知识文档
  8. 关于php的字符串编码
  9. 代码也能“杀”虫:此虫,真虫非Bug也
  10. mac下使用brew安装java等应用
  11. 【2019-2020春学期】数据库作业18:第八章: 数据库编程(实验课大作业)
  12. flash cs6汉化成中文,附汉化包
  13. 致远互联的下一步:从“协同”到“门户”
  14. element表格头部换行
  15. 扫描二维码进入小程序超详细过程
  16. 小新想把百度搜索引擎改为edge
  17. php 浏览器打开excel文件夹里,php网页显示excel表格数据-phpexcel 读取excel里的数据并在页面显示出来...
  18. 安装mysql提示oxc000007b_重装win7系统黑屏提示oxc000007b怎么办
  19. memcpy函数详解
  20. mongodb持久化

热门文章

  1. java: 非法字符: ‘\ufeff‘、java: 需要class, interface或enum
  2. 回调函数是同步还是异步_[React] 4 - setState / 异步还是同步?
  3. Spring源码之bean的加载(三)从bean中获取对象
  4. [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
  5. 循环神经网络系列(一) RNN、双向RNN、深度RNN
  6. 梯度下降-单变量线性回归-理论+代码+解释
  7. 基于Pairwise排序学习的因子分解推荐算法
  8. LGP2046[NOI2010]海拔正确性证明
  9. 8.ps输出属性-----状态
  10. [转] Android SDK manager 无法获取更新版本列表