有以下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. 【Unity 3D】学习笔记三十:游戏元素——游戏地形

    游戏地形 在游戏的世界中,必然会有非常多丰富多彩的游戏元素融合当中. 它们种类繁多.作用也不大同样.一般对于游戏元素可分为两种:经经常使用.不经经常使用.经常使用的元素是游戏中比較重要的元素.一般须要 ...

  2. 【BZOJ4976】宝石镶嵌 DP

    [BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法 ...

  3. 注册HttpHandler

    How to: Register HTTP Handlers After you have created a custom HTTP handler class, you must register ...

  4. c++动态绑定的技术实现

    1 什么是动态绑定 有一个基类,两个派生类,基类有一个virtual函数,两个派生类都覆盖了这个虚函数.现在有一个基类的指针或者引用,当该基类指针或者引用指向不同的派生类对象时,调用该虚函数,那么最终 ...

  5. 微信小程序设计指南

    微信小程序设计指南 · 小程序 https://developers.weixin.qq.com/miniprogram/design/index.html

  6. 【题解】P2444 病毒

    [题解][P2444 POI2000]病毒 一道\(ac\)自动机好题... 考虑危险的字符串是什么意思,就是在这个文本串中有模式串的匹配,这样的匹配可以通过\(ac\)自动机完成. 那么给定一个字符 ...

  7. 小记tensorflow-1:tf.nn.conv2d 函数介绍

    tf.nn.conv2d函数介绍 Input: 输入的input必须为一个4d tensor,而且每个input的格式必须为float32 或者float64. Input=[batchsize,im ...

  8. angularJs自定义模块

    <script type="text/javascript"> var myApp = angular.module("myApp",[]); my ...

  9. API的理解和使用——有序集合

    有序集合常用的命令 命令 功能 zadd key score member [score member ... ] 添加元素 zcard key 计算成员个数 zscore key member 计算 ...

  10. 分享知识-快乐自己:IDEA下maven编译打包Java项目成jar包但是resource下配置文件无法编译

    今天在写分布式项目的时候,一直无法编译 resource 下的配置文件:(在target文件夹下的 classes文件查看是否编译) 最后只能通过在POM文件中配置resources配置 得以解决: ...