初学angularjs阶段,刚刚看到菜鸟教程的angularjs依赖注入。现在整理一下:
1.含义:一个或更多的依赖(可以理解为模块关系依赖)或服务(分为内建服务[例如$http,$tiomeout等]和自建服务),被注入(或引用到)一个独立对象中,成为该对象的一部分。
举个栗子:①一个存在于社会中的人。很多事情不必亲自去做,社会为他提供了各种服务,例如图书馆,地铁,公交,公园等。他想乘坐地铁去某个地方,不必自己造地铁,只要花钱(注入)就可以使用这个服务。当然他也可以自己定制个性化服务(社会提供的服务可以理解为内建服务),他可以自己定制一个劳斯莱斯(自建服务),不去去苦哈哈的挤地铁了。
②同样的这个人,不仅是个体。更是各种关系(依赖)中的人。比如:张三想去某国内*医院看专家号,而自己的妻子的父亲正好和这个专家是熟人,那张三就可以轻松的看到专家号。而不去自己去排队。
③一个人可以动用社会的服务和自己经营的各种人际关系。去完成很多事情,而不必亲力亲为。而这些用社会的服务和自己经营的各种人际关系,成为这个人的一部分。
2.目的:高内聚,低耦合。
题外话:我怎么感觉是为了偷懒呢。自己想把自己的工作分给别人,但又要保证工作质量的做法。哈哈
3.分类:
1)内建服务:据说“AngularJS 内建了30 多个服务”。这是菜鸟教程里面一个关于服务的介绍:http://www.runoob.com/angularjs/angularjs-services.html
2)自建服务:同样是菜鸟教程的介绍:http://www.runoob.com/angularjs/angularjs-dependency-injection.html
虽然有例子,不过对于我这种小白来说,还是不清楚。所以上网整理一下相关资料,自建服务的方式主要由三种: Factory Service Provider:
①factory方法。该方法在函数里面定义了一个对象,然后给这个对象添加属性和方法,最后返回这个对象:
factory也可以注入内建服务:
②service方法与factory方法的不同,service方法去掉了return,实例化了一个类:
service也可以注入内建服务。同时factory返回的是对象,service"返回"的是类,factory返回的对象可以被注入到service中进行使用:
③provider是唯一一个可以传进 .config() 函数的 service。目的是产生一个可以配置的service。它可以在 service 对象启用之前,先进行模块范围的配置
3)最后,还要说一下。ps:不要把逻辑都写在controller里面,controller这一层应该很薄。因为controller在不用时(如:切换或者刷新页面时)就会被销毁、清空,而service在应用生命周期结束时(如:关闭浏览器时)才会被清空。所以应该使用service,然后把service注入到controller里面,而让controller起一个初始化的作用。
具体的原因看这里-这是开源中国上的对原文的翻译 :http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider ; 如果你英语水平不错,可以看看原文,里面有原文链接,不过需要fq。
小白正在学习阶段,如果总结的那里有错误的地方,恳请大家一定指出来。