初学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。

小白正在学习阶段,如果总结的那里有错误的地方,恳请大家一定指出来。

关于angularjs依赖注入的整理的更多相关文章

  1. AngularJS依赖注入

    <html> <head> <meta charset="utf-8"> <title>AngularJS 依赖注入</tit ...

  2. AngularJS 依赖注入

        依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该 ...

  3. AngularJS开发指南10:AngularJS依赖注入的详解

    依赖注入是一种软件设计模式,用来处理代码的依赖关系. 一般来说有三种方法让函数获得它需要的依赖: 它的依赖是能被创建的,一般用new操作符就行. 能够通过全局变量查找依赖. 依赖能在需要时被导入. 前 ...

  4. (五)Angularjs - 依赖注入

    如何找到API? AngularJS提供了一些功能的封装,但是当你试图通过全局对象angular去 访问这些功能时,却发现与以往遇到的库大不相同. 比如,AngularJS暴露了一个全局对象:angu ...

  5. AngularJS - 依赖注入(Dependency Injection)

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 依赖注入 依赖注入是软件设计模式中的一部分,用于处理组件是如何得到它说依赖的其它组件的. ...

  6. angularjs 依赖注入--自己学着实现

    在用angular依赖注入时,感觉很好用,他的出现是 为了"削减计算机程序的耦合问题" ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个 ...

  7. AngularJS——依赖注入

    依赖注入    依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题.关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/art ...

  8. 个人对于angularjs依赖注入的理解

    依赖注入(Dependency Injection,DI),作者认为本文中所有名词性的"依赖" 都可以理解为 "需要使用的资源". 对象或者函数只有以下3种获取 ...

  9. angularjs 依赖注入原理与实现

    在用angular依赖注入时,感觉很好用,他的出现是 为了“削减计算机程序的耦合问题” ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个这么牛逼的功能.于是 ...

随机推荐

  1. 37条常用Linux Shell命令组合

    序号 任务 命令组合 1 删除0字节文件 find . -type f -size 0 -exec rm -rf {} \; find . type f -size 0 -delete 2 查看进程, ...

  2. MapXtreme+Asp.net 动态轨迹

    MapXtreme+Asp.net 动态轨迹(请求大神指点)   功能简介:在MapXtreme+Asp.net的环境下实现轨迹回放功能,经过两天的努力基本实现此功能.但还有部分问题需要解决,求大神们 ...

  3. 让C#、VB.NET实现复杂的二进制操作

    VB.NET和C#属于高级语言,对二进制位操作的支持不是很好,比如没有了移位运算等,用的时候确实很不方便,所以在闲暇之余我重新封装了一个用于C#.VB.NET的位操作类库,通过该类库可以实现数据移位. ...

  4. vps使用(centos)2

    SVN Server搭建 1.安装软件包 [root@cloud ~]# yum install subversion mysql-server httpd mod-dav_svn mod-perl ...

  5. php+redis实现多台服务器内网存储session并读取

    大型网站由于大并发的问题会导致系统出现诡异的崩溃性问题这着实让人很是蛋疼,首先考虑的就是负载均衡服务器来处理这个,当然数据库的性能也是非常非常重要的,今天就说下在负载均衡情况下对于session这个问 ...

  6. bdev文件系统

    文件系统,是对磁盘数据进行组织和管理的一种机制. 可通过装载,以目录和文件的形式向用户层呈现.但,文件和目录其实只是文件系统的前端而已,只是文件系统的用户视图,其本质还在于这样的一个数据结构:inod ...

  7. Eclipse 中,web项目在Tomcat运行时填写不了Server name

    最近开发项目,从MyEclipse中导入项目到Eclipse中,那些WEB属性都在,可就是不能在Tomcat上运行.纠结一番,最后发现是这个问题: WEB的版本问题. 具体问题看下图: 解决方案: W ...

  8. 正则表达式之邮箱验证javascript代码

    fuchangxi的正则: 复制代码 代码如下: /^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g 开始必须是一个或者多个单词 ...

  9. 简述java程序中的main方法

    简述main方法: 在java语言程序编写时都会涉及到一个main方法,它的格式为: public static void main(String[] args)(一般必须这么定义,这是java规范) ...

  10. Apache的htaccess文件出现500错误的原因

    Apache 我平时很少用到,今天测试环境下碰到个问题,老是500错误莫名其妙 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FI ...