AngularJs(Part 3)--注册服务
有以下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();
});
最新文章
- 借助JavaScript中的Dom属性改变Html中Table边框的颜色
- div水平居中
- android ListView异步加载图片(双缓存)
- VS2010无法打开CSS问题
- SQL Server 已提交读快照 测试
- neutron flat和vxlan网络访问外网流量走向
- margin负值的相关应用
- lodash 实现一些常见的功能
- Schaepher 博客目录
- Spring配置动态数据源-读写分离和多数据源
- 七、XHTML介绍
- 离线安装Cloudera Manager 5和CDH5(最新版5.9.3) 完全教程(五)数据库安装(双节点)
- Java POI 读取word文件
- 华为核心交换机绑定IP+MAC+端口案例
- HLOCAL 初探
- Rocket MQ 源码解析
- Uncaught TypeError: $(...).daterangepicker is not a function
- OSG和ProLand 的海面仿真
- JS实现二叉树的创建和遍历
- 转Hibernate Annotation mappedBy注解理解
热门文章
- Epplus使用技巧
- phpstorm pycharm IntelliJ IDEA激活
- Android-Android Studio 3.0找不到Android Device Monitor
- 【BZOJ2789】[Poi2012]Letters 树状数组
- transition_matrix Markov chain
- mybatis 执行查询时报错 【Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: 】
- STO存在哪些潜在隐患?
- PHP加Nginx实现动态裁剪图片方案
- Java for LeetCode 132 Palindrome Partitioning II
- POJ - 2031 Building a Space Station 【PRIME】