模型是指$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)进行配置。
    • 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 学习笔记(四)服务的更多相关文章

  1. AngularJS学习笔记(四) 自定义指令

    指令(directive)是啥?简单来说就是实现一定功能的XXX...之前一直用的ng-model,ng-click等等都是指令.当我有一个ng没提供的需求的时候,就可以自定义个指令.指令的好处显而易 ...

  2. go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)

    目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...

  3. AngularJs学习笔记--Forms

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/forms 控件(input.select.textarea)是用户输入数据的一种方式.Form(表单) ...

  4. AngularJs学习笔记--expression

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/expression 表达式(Expressions)是类Javascript的代码片段,通常放置在绑定 ...

  5. AngularJs学习笔记--directive

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...

  6. AngularJs学习笔记--html compiler

    原文再续,书接上回...依旧参考http://code.angularjs.org/1.0.2/docs/guide/compiler 一.总括 Angular的HTML compiler允许开发者自 ...

  7. AngularJs学习笔记--concepts(概念)

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/concepts 继续.. 一.总括 本文主要是angular组件(components)的概览,并说明 ...

  8. AngularJs学习笔记--Using $location

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/dev_guide.services.$location 一.What does it do? $loc ...

  9. AngularJs学习笔记--Creating Services

    原版地址:http://docs.angularjs.org/guide/dev_guide.services.creating_services 虽然angular提供许多有用的service,在一 ...

  10. AngularJs学习笔记--Understanding the Controller Component

    原版地址:http://docs.angularjs.org/guide/dev_guide.mvc.understanding_model 在angular中,controller是一个javasc ...

随机推荐

  1. (NO.00004)iOS实现打砖块游戏(三):游戏主场景和砖块

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 制作墙体 首先在SpriteBuilder中新建Wall.ccb ...

  2. C#之FileInfo的简单操作

    和DirectoryInfo一样,FileInfo类同样是很方便的就能实现复杂的功能. 如下,我们一起来看一下一个简单的小例子吧. using System; using System.Collect ...

  3. 95%的bug是由程序员造成的

    原文作者:Jeff Atwood 作者在Twitter上发的一条短讯: "在怨天尤人之前,我们应该先自我反省.努力把自身的问题解决了." 12:22 PM –2012-5-30 你 ...

  4. Block高级用法:Block传值UI_12(3)

    1.简单复习Block的定义.赋值.调用做学习传值铺垫: //声明一个函数 无返无参void printfHello(int a);//函数的实现void printfHello(int a){    ...

  5. React Native之hellWord

    初始化项目工程 进入自己的工作空间然后shift+鼠标右键打开命令行窗口执行如下命令创建RN工程HelloWorld: 然后使用Android Studio打开AVD Manager创建模拟器,在打开 ...

  6. 【Unity Shaders】Diffuse Shading——在Surface Shader中使用properties

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  7. JQuery实战总结二 横向纵向菜单下拉效果图

    记得以前在浏览了大多数网站的上面发现很多下拉的导航栏,觉得特别好玩,毕竟咱们是学习编程的嘛,对这下拉的效果还是挺感兴趣的,这种淡入淡出,随着鼠标移动的位置不同.有无等而出现不同的效果,给用户以神美感. ...

  8. 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析

    . Android源码看的鸭梨大啊, 补一下C语言基础 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/detai ...

  9. Cocos2D中相关问题提问的几个论坛

    如果和SpriteBuilder相关可以到: http://forum.spritebuilder.com 提问. 如果是Cocos2D的问题,则可以到以下论坛询问: http://forum.coc ...

  10. hibernate关联对象的增删改查------查

    本篇博客是之前博客hibernate关联对象的增删改查------查 的后继,本篇代码的设定都在前文已经写好,因此读这篇之前,请先移步上一篇博客 //代码片5 SessionFactory sessi ...