有以下5中方法注册一个AngularJS可以识别的Service

value和constant是两个极其简单的方法,只有少数情况下会使用。 service已经开始复杂了起来。而factory是我认为既简单又有足够灵活的度的方法。最后的provide是最复杂的方法,其他方法都是provide的特殊情况下的简化。

另外AngularJS中注册的Service都是单例的。

1.Constant
这是最简单的方法,只是注册了一个常量。在以后的程序中,主要注入了‘MAX_LEN’, 那么就可以使用

module.constant('MAX_LEN',10);
module.service('service1',['MAX_LEN',function(MAX_LEN){
  console.log(MAX_LEN) //控制台会打印出 10.
}]);

2.Values
   这个也比较简单,单纯注册一个类,这个类没有其他依赖

module.value('myservice',new MyService());

3.Service

module.service('myjob',['myservice',function(){
myservice.work();
}]);

4.Factories

这是比较灵活又不失简单的方法。 注册一个工厂方法给AngularJS。使用myjob时,AngularJS会调用这个工厂方法来生成我们需要的对象:就是最后return的对象(他可以是任意合法的javascript对象)。

下面的例子中返回的是一个带3个方法的对象。使用是直接用 myjob.push() , myjob.put(), myjob.get()...调用。

module.factory('myjob',['myservice',function(myservice){
  ...
return {
push:function(){},
put:function(){},
get:function(){},
.....
};
}]);

5.Providers.
上面所有方法其实都是provide的一个特例。provide仍然是注册一个工厂方法。这个工厂方法必须返回一个带有$get方法的对象。而$get方法其实也是一个工厂方法。它返回的就是我们需要的对象。下面的例子中myjob其实带有三个方法push,put,get, 我们可以在以后随意使用。但是可以看到还有一个 setMinLen方法,它与$get方法同级。如何调用就牵涉到module的生命周期了。

module.provide('myjob',function(){
var config={minLen:10};
return {
setMinLen:function(minLen){
config.minLen=minLen||config.minLen;
},
$get:function(myservice,MAX_LEN){
return {
push:function(){},
put:function(){
if(10<config.minLen)
...
},
get:function(){}, };
}
};
});

Modules 生命周期
AngularJS中module要起作用必须经过两个阶段
    1. The configuration phase: 这个阶段收集所以经过provide注册的服务,并进行前期的配置。上面的setMinLen就可以在这个阶段调用。
    2. The run phase: It is the phase where we can execute any post-instantiaation logic.这个阶段才有$scope的概念。
    
The configuration phase: 这是依赖的不是服务,而是服务的provider,所以方法参数都是服务名加Provider的后缀

    module.config(function(myjobProvider){
myjobProvider.setMinLen(20);
});

The run phase:

    module.run(function($rootScope){
$rootScope.appStarted=new Date();
});

AngularJs(Part 3)--注册服务的更多相关文章

  1. C#操作注册服务卸载服务启动服务停止服务.. .

    using Microsoft.Win32; using System; using System.Collections; using System.Collections.Generic; usi ...

  2. 一台服务器发布多个tomcat并注册服务名办法

    修改服务名称 打开Tomcat7.0.65_1/bin/service.bat  修改注册服务名称 当然这个名字自己改 比如Tomcat7_2 原始文件:   set SERVICE_NAME=Tom ...

  3. maven小项目注册服务(一)--email和persist模块

    跟着书里的讲解,跟着做了一遍该项目: 首先明白注册账户的需求: 账号的lD和Email地址都可以用来唯一地标识某个用户,而显示名称则用来显示在页面下,方便浏览.注册的时候用户还需要输入两次密码,以确保 ...

  4. mysql注册服务

    http://www.2cto.com/database/201301/185456.html ____________________________________________________ ...

  5. dubbo注册服务IP解析异常及IP解析源码分析

    在使用dubbo注册服务时会遇到IP解析错误导致无法正常访问. 比如: 本机设置的IP为172.16.11.111, 但实际解析出来的是180.20.174.11 这样就导致这个Service永远也无 ...

  6. 自动注册服务NET Core扩展IServiceCollection

    NET Core扩展IServiceCollection自动注册服务 前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中, ...

  7. windows安装Apache,注册服务出现“(OS 5)拒绝访问。 : AH00369: Failed to open the WinNT service manager..."错误

    原文:http://blog.csdn.net/jaray/article/details/9950211 在安装Apache的时候,我下载的是zip格式,不是msi安装版,需要自己注册服务,才能在桌 ...

  8. 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?

    在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...

  9. 解析 .Net Core 注入 (1) 注册服务

    在学习 Asp.Net Core 的过程中,注入可以说是无处不在,对于 .Net Core 来说,它是独立的一个程序集,没有复杂的依赖项和配置文件,所以对于学习 Asp.Net Core 源码的朋友来 ...

随机推荐

  1. excel十几万行数据快速导入数据库研究(转,下面那个方法看看还是可以的)

    先贴原来的导入数据代码: 8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.setting ...

  2. C# WinForm退出方法

    1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit();  强制所有消息中 ...

  3. 3720: Gty的妹子树

    3720: Gty的妹子树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1440  Solved: 482[Submit][Status][Disc ...

  4. spring事务和mysql的隔离级别

    mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下.   mysql事务: 在mysql中,只有使用了I ...

  5. Linux 日志命令

    当日志文件存储日志很大时,我们就不能用vi直接进去查看日志,需要Linux的命令去完成我们的查看任务 Log位置: /var/log/message 系统启动后的信息和错误日志,是Red Hat Li ...

  6. Eclipse javax.servlet.jsp.PageContext cannot be resolved to a type 错误解决办法

    不要 直接将jsp-api.jar拷贝到lib目录下,而是通过外部jar包引用.项目 右键->Properties->Libraries->Add External JARS-选择 ...

  7. PHP加Nginx实现动态裁剪图片方案

    许久以前写过一篇也是关于高性能PHP图片动态裁剪方案的文章,那文章使用的是nginx Cache和rewrite实现的,当然再加上CDN,那个方案存在一个问题就是图片并没有实际生成,而是以二进制的形式 ...

  8. Spring Aop切点

    切点用于准确定位应该在什么地方应用切面的通知.通知和切点是切面的最基本的元素.在Spring AOP中要使用AspectJ的切点表达式来定义切点.下面我们列出Spring AOP所支持的AspectJ ...

  9. 利用iOS原生系统进行人脸识别+自定义滤镜(GPUImage)

    人脸识别+滤镜效果(基于GPUImage实现的自定义滤镜) 最近碰到一个好玩的需求.说要客户端这边判定一下是否有人脸.在有的基础上.对相片做进一步的美化滤镜处理. 首先是人脸的识别判定; //将图片对 ...

  10. debian下烧写stm32f429I discovery裸机程序

    需要安装openocd软件.如果已安装默认的openocd,需要先卸载系统默认的openocd(默认版本是0.5.0,版本太低),然后再安装. 在安装前需要安装libusb库文件: -dev libu ...