AngularJs 学习笔记(四)服务
模型是指$scope上保存的包含瞬时状态数据的JavaScript对象。
服务是一个单例对象,只会被$injector实例化一次,并且是在需要的时候才会被创建,服务提供了把与特定功能相关联的方法集中在一起的接口。
共有5种方式来创建服务:
- factory(name,getFn):
- name为注册的服务名,服务是单例对象在应用的生命周期内只会被调用一次,getFn可以是一个函数或者是一个包含可被注入对象的数组。
- service(name,constructor):
- name为要注册的服务名,constructor为构造函数,用来生成服务对象,在创建实例的时候通过new关键字来实例化服务对象(也就是创建一个对象,然后将构造函数的this绑定到这个对象上)。
- provider(name,aProvider):
- name参数为provideCache中注册的名字,也是服务实例的名字,name+Provider会成为服务的提供者。aProvider参数要求为一个提供者对象(包含$get函数)。所有的服务工厂都是由$provide提供的,$provide服务负责在运行时初始化这些提供者,提供者是一个具有$get()方法的对象。该方法负责在$providerCache中注册服务,所有创建服务的方法都是构建在provider方法之上,factory()方法是provider()方法的简略形式,将如传入的函数默认为服务提供者的$get函数,注入器注入服务的其实是服务提供者的$get返回的对象,也就是说$injector通过调用$get方法来创建服务实例。此外,AngularJS的config函数,可以对provider()方法返回的服务可以进行额外的配置,在config对其提供者(ServiceProvider)进行配置。
- factory(name,getFn):
- constant(name,value):
- 可以将已经存在的常量注册为服务。
- value(name,value):
- 与constant类似,只不过前者可以注入到配置函数中来配置数据,而value不行。
- decorator(name,decoratorFn):
- $provide服务提供了在服务实例创建时对其进行拦截的功能,可以对服务进行扩展或者完全用另外的内容来替代。name为要拦截的服务,decoratorFn为装饰器函数,在服务实例化的时候进行调用。在装饰器函数中,$delegate是进行装饰的最原始的服务(就是要被装饰的服务的引用)。
测试代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="angular-1.5.8/angular.min.js"></script>
<script src="angular-1.5.8/angular-route.min.js"></script>
</head>
<body ng-app="MyApp">
<div ng-controller="MyController"></div>
<script>
var Person=function () {
this.name='baishoujing'
}
var app=angular.module('MyApp',['ngRoute']);
app.factory('UserService',['$log',function ($log) {
$log.info('UserService is loaded!')
return { name:'zhaoxiangjun '}
}]);
app.service('PersonService',Person)
app.controller('MyController',function (UserService,PersonService) {
alert(UserService.name)
alert(PersonService.name)
});
var UserServiceDecorator=function ($delegate,$log,$injector) {
$log.info($delegate)
alert($delegate)
return $delegate
};
app.config(function($provide){
$provide.decorator('UserService',UserServiceDecorator)
});
</script>
</body>
</html>
运行结果:

AngularJs 学习笔记(四)服务的更多相关文章
- AngularJS学习笔记(四) 自定义指令
指令(directive)是啥?简单来说就是实现一定功能的XXX...之前一直用的ng-model,ng-click等等都是指令.当我有一个ng没提供的需求的时候,就可以自定义个指令.指令的好处显而易 ...
- go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)
目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...
- AngularJs学习笔记--Forms
原版地址:http://code.angularjs.org/1.0.2/docs/guide/forms 控件(input.select.textarea)是用户输入数据的一种方式.Form(表单) ...
- AngularJs学习笔记--expression
原版地址:http://code.angularjs.org/1.0.2/docs/guide/expression 表达式(Expressions)是类Javascript的代码片段,通常放置在绑定 ...
- AngularJs学习笔记--directive
原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...
- AngularJs学习笔记--html compiler
原文再续,书接上回...依旧参考http://code.angularjs.org/1.0.2/docs/guide/compiler 一.总括 Angular的HTML compiler允许开发者自 ...
- AngularJs学习笔记--concepts(概念)
原版地址:http://code.angularjs.org/1.0.2/docs/guide/concepts 继续.. 一.总括 本文主要是angular组件(components)的概览,并说明 ...
- AngularJs学习笔记--Using $location
原版地址:http://code.angularjs.org/1.0.2/docs/guide/dev_guide.services.$location 一.What does it do? $loc ...
- AngularJs学习笔记--Creating Services
原版地址:http://docs.angularjs.org/guide/dev_guide.services.creating_services 虽然angular提供许多有用的service,在一 ...
- AngularJs学习笔记--Understanding the Controller Component
原版地址:http://docs.angularjs.org/guide/dev_guide.mvc.understanding_model 在angular中,controller是一个javasc ...
随机推荐
- Java-Io之文件File
File是"文件"和"目录路径名"的抽象表示形式.File之间继承Object,实现了Serializable和Comparable接口,因此文件支持File对 ...
- UNIX环境高级编程——主线程与子线程的退出关系
我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下. 1. 主线程等待新线程先结束退出,主线程后退出.正常执行. 示例代码: #include & ...
- 基于MSRDS机器人仿真平台的多机器人PID编队控制算法
自己调试的编队PID算法,效果也还可以,具体使用教程参考视频链接: http://v.youku.com/v_show/id_XMTUwNjc3NjMyNA 仿真中三个机器人保持编队,做直线运动,队形 ...
- 基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件
基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件 在INAND还没有写入镜像文件之前,通过ATK工具烧录xldr.nb0和eboot.nbo到INAND中,见相关链接 ...
- Leetcode_112_Path Sum
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41910495 Given a binary tree an ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十二)
如果选手能在加速的时候屁股产生推进器效果就跟好了,仿佛选手腾云驾雾的感觉.我们可以用Cocos2D中的CCMotionStreak类来轻松实现.下面在Player.h接口文件添加以下代码: @prop ...
- Errors running builder 'Integrated External Tool Builder' on project xxx
出现这样的提示,表明你的项目的Builder项出了问题. 解决方法是: 右键项目选择"Properties",再选择"Builders",删除丢失的builde ...
- studio多渠道打包
由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这事就简单了. 友盟多渠道打包 废话 ...
- git remote
在git里,服务器上的仓库在本地称之为remote. 直接clone一个仓库: $: git clone git@search.ued.taobao.net:projects/search.git 另 ...
- sqlite相关使用
一.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能 ...