有以下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();
});

最新文章

  1. 借助JavaScript中的Dom属性改变Html中Table边框的颜色
  2. div水平居中
  3. android ListView异步加载图片(双缓存)
  4. VS2010无法打开CSS问题
  5. SQL Server 已提交读快照 测试
  6. neutron flat和vxlan网络访问外网流量走向
  7. margin负值的相关应用
  8. lodash 实现一些常见的功能
  9. Schaepher 博客目录
  10. Spring配置动态数据源-读写分离和多数据源
  11. 七、XHTML介绍
  12. 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)
  13. Java POI 读取word文件
  14. 华为核心交换机绑定IP+MAC+端口案例
  15. HLOCAL 初探
  16. Rocket MQ 源码解析
  17. Uncaught TypeError: $(...).daterangepicker is not a function
  18. OSG和ProLand 的海面仿真
  19. JS实现二叉树的创建和遍历
  20. 转Hibernate Annotation mappedBy注解理解

热门文章

  1. Epplus使用技巧
  2. phpstorm pycharm IntelliJ IDEA激活
  3. Android-Android Studio 3.0找不到Android Device Monitor
  4. 【BZOJ2789】[Poi2012]Letters 树状数组
  5. transition_matrix Markov chain
  6. mybatis 执行查询时报错 【Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: 】
  7. STO存在哪些潜在隐患?
  8. PHP加Nginx实现动态裁剪图片方案
  9. Java for LeetCode 132 Palindrome Partitioning II
  10. POJ - 2031 Building a Space Station 【PRIME】