重点:angular1核心之一service
以下分享来自团队童鞋vernvn
Service
自定义或内建服务,它是一个函数或对象,
$http服务
|
|
创建自定义服务,五种方法,constant,value,factory,service,provider,一般情况下factory与service使用较多,angular内置服务都是以$开头,所以自定义的服务应该避免以$开头,造成混乱。
所有类型的service都是单体,单体是什么?单体是一种设计模式,它限制了每一个类仅能够实例化为一个对象,无论我们在什么地方注入,将永远使用同一个实例,换句话就是,如果我们在一个地方改变了其中的某个值,其他地方也会发生相应的改变;
constant
|
|
- constant是用来在指令中提供默认配置,放入的值不会改变;
value
|
|
- value经常用来保存值,数值是可以改变的,这是和constant最大区别,但是不能对其中的值进行计算
provider
|
|
- 通过provider方法创建的服务一定要包含$get方法,否则会报错,provider注入的结果就是$get返回的结果,并且在三种创建服务的方法中,只有provider方法创建的服务可以传进config函数,以用于在对象启动前,对模块进行配置,但是在config中进行配置的只能在是$get函数之外定义的变量,注入config函数时,参数名必须是 服务名+Provider,例如下面代码只有color能被访问到,getcolor却不能1234567891011app.provider('myprovider',function(){this.color = '';this.$get = function(){var that = this;return {getcolor : function(){return that.color}}}})
|
|
factory
|
|
- 通过factory创建的服务必须有返回值,即return函数,factory方法注入的结果即是return返回的结果,可以使用注入对象的定义的方法,例如1234567var factory = {};var _name = 'lee';factory.getname = function(){return _name;};return factory;})
service
|
|
- 通过service方法创建的服务可以不用返回任何值,因为service本身返回一个构造器,系统会用new关键字来创建一个对象,所以我们可以在service内部使用this来进行扩展。123456789app.service('myservice',function(){this.name = '';this.getname = function(){return this.name;}this.setname = function(name){this.name = name;}})
上面的代码也可以用以下方式表示123456789101112app.factory('myservice',function(){ return new Foobar();})function Foobar(){ this.name = ''; this.getname = function(){ return this.name } this.setname = function(name){ this.name = name }}
Foobar是一个’类’,如果已经有个一个类,诸如Foobar,只需要注入进服务
|
|
官方小例子:
|
|
|
|
|
|
项目中的服务例子
|
|