AngularJS服务中serivce,factory,provider的区别
Angular服务是一个由服务工厂创建的单例对象。这些服务工厂是由 service provider 依次创建的。而service providers是构造函数。它们必须包含一个$get属性用于在实例化的时候返回服务工厂。
当你请求一个服务,$injector负责找到正确的service provider,然后将它实例化得到service factory,并调用service factory的 $get 方法来得到服务的实例。
- provider(provider) - 使用$injector来注册一个 service provider 。
- constant(obj) - 注册一个只有providers 和 services 可以访问的 值或对象。
- value(obj) - 注册一个只有services 可以访问的 值或对象。
- factory(fn) - 注册一个 service factory 方法,该方法被包裹在 provider 对象当中,并通过
$get属性来返回这个 factory 方法。 - service(class) - 注册一个构造方法,它是一个被包裹在 service provider 对象中的类,然后通过
$get属性来使用该构造方法实例化一个新的对象。
provider(name, provider);
| 参数 | 类型 | 详细 |
|---|---|---|
| name | string |
实例(也就是service factory)名称。记住:它的 provider 需要通过 |
| provider | Object/function() |
如果这个 provider 是:
|
factory(name, $getFn);
注册一个service factory,它用于返回一个service 的实例。这是一个注册service factory的简单的写法,因为它的provider 仅仅包含一个 $get 属性。如果你不需要在provider中配置你的 service ,那你可以使用它。
| 参数 | 类型 | 详细 |
|---|---|---|
| name | string |
实例的名称 |
| $getFn | function() |
创建实例的$get方法。 本质来说这是一个 |
service(name, constructor);
注册一个构造方法, 它会通过new方法来创建service实例。 这也是一个$provide.provider(name, {$get: $getFn})的简写法,但这里$getFn是一个构造函数,然后通过new来返回服务的实例。
如果你将你的服务定义为一个type或class,你应该使用$provide.service(class)。
value(name, value);
通过 $injector 注册一个value service,它可以是一个字符串、数值、数组、对象或者方法。该值实际上也是通过它的provider的$get属性,一个没有参数的方法来返回的value service。
它跟constant services很像,但不同点在于他们不能被注入到模块的配置方法中。
AngularJS服务中serivce,factory,provider的区别的更多相关文章
- AngularJS 1.x系列:AngularJS服务-Service、Factory、Provider、Value及Constant(5)
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- angularJS 服务-$provide里factory、service方法
当你初试 Angular 时,很自然地就会往 controller 和 scope 里堆满不必要的逻辑.一定要早点意识到,controller 这一层应该很薄:也就是说,应用里大部分的业务逻辑和持久化 ...
- AngularJS服务
在使用AngularJS的路由管理和控制视图加载的时候,当新的视图加载进来,原有视图的控制器会被销毁,这是出于内存占用和性能的考虑.服务提供了一种能在应用的整个生命周期内保持和共享数据的方法,它能够在 ...
- AngularJS 1.x系列:AngularJS服务-Service
1. AngularJS服务 AngularJS可注入类型包括:Service.Factory.Provider.Value及Constant. 2. Service AngularJS Servic ...
- 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?
在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...
- AngularJS中的Provider们:Service和Factory等的区别
引言 看了很多文章可能还是不太说得出AngularJS中的几个创建供应商(provider)的方法(factory(),service(),provider())到底有啥区别,啥时候该用啥,之前一直傻 ...
- AngularJS 中的 factory、 service 和 provider区别,简单易懂
转自:http://blog.csdn.net/ywl570717586/article/details/51306176 初学 AngularJS 时, 肯定会对其提供 factory . serv ...
- [译]AngularJS中几种Providers(Factory, Service, Provider)的区别
原文: http://blog.xebia.com/2013/09/01/differences-between-providers-in-angularjs/ 什么是Provider? Angula ...
- angularJs 自定义服务 provide 与 factory 的区别
<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...
随机推荐
- js 选项卡实现
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
- hdu1890 伸展树(区间反转)
对于大神来说这题是水题.我搞这题花了快2天. 伸展树的优点有什么,就是树不管你怎么旋转序列是不会改变得,并且你要使区间反转,只要把第k大的点转到根结点,那么它的左子树就是要交换的区间[l,r),然后交 ...
- Java设计模式-备忘录模式(Memento)
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C ...
- Yii2分页
Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成 yii\data: Paginati ...
- springMVC实现防止重复提交
参考文档:http://my.oschina.net/mushui/blog/143397
- 【poj1201】 Intervals
http://poj.org/problem?id=1201 (题目链接) 题意 给出n个区间${[ai,bi]}$,要求选出尽可能少的数,使得每个区间i中至少存在${c[i]}$个数. Soluti ...
- UVa 12505 Searching in sqrt(n)
传送门 一开始在vjudge上看到这题时,标的来源是CSU 1120,第八届湖南省赛D题“平方根大搜索”.今天交题时CSU突然跪了,后来查了一下看哪家OJ还挂了这道题,竟然发现这题是出自UVA的,而且 ...
- CATransform3D
本章介绍图层的几何组成部分,及他们之间的相互关,同时介绍如何变换矩阵可以产生复杂的视觉效果. 1.1 图层的坐标系 图层的坐标系在不同平台上面具有差异性.在iOS系统中,默认的坐标系统原点在图层的中心 ...
- easyUI框架之学习记录汇总
在添加完之后,可以使用 $.parser.parse();这个方法进行处理:(1) 对整个页面重新渲染: $.parser.parse(); (2) 渲染某个特定的objectvar targetOb ...
- spring事务学习(转账案例)(二)
四.通过springAop进行事务管理 继续从第一个无事务操作的项目中进行更改. 只修改applicationContext.xml配置文件,注意设置transaction引用 <?xml ve ...