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 ...
随机推荐
- Hibernate-Criteria用法
criteria 英[kraɪˈtɪərɪə] 美[kraɪˈtɪrɪə] Hibernate 设计了 CriteriaSpecification Hibernate 设计了 CriteriaSpec ...
- Java 缓存技术
以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点: 1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新 2:类和方法的 ...
- Java编程思想学习(十) 正则表达式
正则表达式是一种强大的文本处理工具,使用正则表达式我们可以以编程的方法,构造复杂的文本模式,并且对输入的字符串进行搜索.在我看来,所谓正则表达式就是我们自己定义一些规则,然后就可以验证输入的字符串是不 ...
- BZOJ4196 软件包管理器
Description Linux用户和OSX用户一定对软件包管理器不会陌生. 通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖 ...
- Vijos1459 车展 (数学)
描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i].主管已 ...
- android studio中the logging tag can be most 23 characters
转:http://blog.csdn.net/voiceofnet/article/details/49866047 今天写代码的时候,突然发现平时用的好好的Log竟然报错,提示信息为:the log ...
- UvaLive 5026 Building Roads
传送门 Time Limit: 3000MS Description There is a magic planet in the space. There is a magical country ...
- MVC执行顺序
MVC在底层和传统的asp.net是一致的,在底层之上,相关流程如下: 1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteC ...
- display & visibility区别
http://www.cnblogs.com/zhangran/archive/2012/08/29/2662459.html 说明:在学习css的过程中由于其中包含太多的元素.属性等等,总有许多是自 ...
- jquery ajax提交表单数据的两种方式
http://www.kwstu.com/ArticleView/kwstu_201331316441313 貌似AJAX越来越火了,作为一个WEB程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...