1.模块和依赖注入概述

1.了解模块

AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块。

模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画

可通过定义其提供的对象构建模块。通过依赖注入将模块连接在一起,构建一个完整的应用程序。

AngularJS建立在模块原理上。大部分AngularJS提供的功能都内置到ng-*模块中。

2.依赖注入

定义依赖对象并动态地把它注入另一个对象,使得所有的依赖对象所提供的功能都能使用。(提供器 注入器服务)

提供器:如何创建一个具有所有必要功能的对象的实例(模块的一部分),一个模块把提供器注册到注入器的服务器中。(一个提供器对象只创建一个实例)

注入器服务:跟踪提供器对象的实例。(提供器模块-注入器服务实例)

2.定义AngularJS模块

AngularJS模块实现:配置阶段,运行阶段

1.创建AngularJS Module对象

创建Module对象,注册到注入器服务,返回新创建的Module实例(实现提供器的功能)

  1. var myapp=angular.module(name,[requires],[configFn]);

name:注册在注入器服务中的名称

requires:被添加到注入器服务的供这个模块使用的模块名的数组,若需要另一个模块的功能,需要添加在requires列表(ng模块会默认添加)

configFn:模块配置阶段调用的另一个函数

  1. var myModule=angular.module('myModule',['$Window','$http'],function(){
  2. $provide.value('myValue','Some Value');
  3. })

如果没有requires(依赖),不会创建Module对象,是返回已经创建的实例(会覆盖上面实例的定义)

  1. var myModule2=angular.module('myModule',[]); 

返回上面的实例,没有列出依赖

  1. var myModule3=angular.module('myModule'); 

2.使用配置块

被定义后,执行模块配置。任何提供器都被注册到依赖注入器。

injectable:提供器服务函数,如$provide

  1. config(funciton([injectable,...]))

$provide和$filterProvider服务被传送到config函数。(把命名为startTime的 值提供器 和 命名为myFilter的 过滤器提供器 注册到 注入器服务)

  1. var myModule=angular.module('myModule',[])
  2. myModule.config(function($provide,$filterProvider){
  3. $provide.value("startTime",new Date());
  4. $filterProvider.register('myFilter',function(){});
  5. })

3.使用运行块

配置完成,可以执行AngularJS模块的运行阶段。

运行块中不能实现任何提供器代码。(整个模块已经配置完成 注册到 依赖注入器了)

  1. run(function([injectable,...]))

injectable只是注入器实例。

  1. myModule.run(function(startTime){
  2. startTime.setTime((new Date()).getTime());
  3. })

专门的AngularJS对象提供器(除了config()  (有相应的 animation controller filter directive 对象定义))

  1. animation(name,animationFactory)
  2. controller(name,controlFactory)
  3. filter(name,filterFactory)
  4. directive(name,directiveFactory)

基本控制器:AngularJS具有 内置控制器对象 并知道所有控制器对象 都必须接受 一个作用域对象 作为第一个参数

  1. var mod=angular.module('myMod',[]);
  2. mod.controller('nyController',function($scope){
  3. $scope.somevalue='somevalue';
  4. })  

服务提供器

是一类独特的提供器(不存在已有的特定格式),作为一个服务来提供功能。

  1. value(name,object):最基础的,object参数被简单分配到name,所以注入器中name值和object之间有直接关系
  2. constant(name,object):与value类似,但value不可更改。
  3. factory(name,factoryFunction):采用factoryFunction参数构建将通过注入器提供的对象
  4. service(name,serviceFactory):添加了更面向对象的方法
  5. provider(name,providerFactory):所有其他方法的核心

基本例子:(定义constant value 提供器,方法中定义的值 被注册在  myMod模块 的 注入器服务器 中,通过名字访问)

  1. var mod=angular.module('myMod',[]);
  2. mod.constant("ID","ABC");
  3. mod.value('couter',0);
  4. mod.value('image',{name:'box.jpg',height:12,width:20});

4.实现依赖注入  

一旦定义模块和相应的提供器。就可以把该模块作为其他模块,控制器,其他各种AngularJS对象的依赖来添加(依赖于提供器的对象的$jnject属性值)

  1. var myController=function($scope,appMsg){
  2. $scope.message=appMsg;
  3. };
  4. controller['$inject']=['$scope','appMsg'];
  5. myApp.myController('controllerA',controller);
  6.  
  7. //第二种表达
  8.  
  9. myApp.control('controllerA',['$scope','appMsg',function($scope,appMsg){
  10. $scope.message=appMsg;
  11. }])

injector.js:在控制器和模块定义中实现依赖注入  

  1. <!DOCTYPE html>
  2. <html lang="en" ng-app="myApp">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>AngularJS Dependency Injection</title>
  6. </head>
  7. <body>
  8. <div ng-controller="controllerA">
  9. <h2>Application Message:</h2>
  10. {{message}}
  11. </div>
  12. <hr>
  13. <div ng-controller="controllerB">
  14. <h2>Module Message:</h2>
  15. {{message}}
  16. </div>
  17. <script type="text/javascript" src="angular-1.3.0.js"></script>
  18. <script type="text/javascript" src="injector.js"></script>
  19. </body>
  20. </html>
  1. var myMod=angular.module('myMod',[]);
  2. myMod.value('modMsg','Helllo from my Module');
  3. myMod.controller('controllerB', ['$scope','modMsg',function($scope,msg){
  4. $scope.message=msg;
  5. }]);
  6. var myApp=angular.module('myApp', ['myMod']);
  7. myApp.value('appMsg','Hello from myApp');
  8. myApp.controller('controllerA', ['$scope','appMsg',function($scope,msg){
  9. $scope.message=msg;
  10. }]);

  

4.了解AngularJS模块和依赖注入的更多相关文章

  1. 转: 理解AngularJS中的依赖注入

    理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Prov ...

  2. 理解AngularJS中的依赖注入

    点击查看AngularJS系列目录 理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS ...

  3. 详解AngularJS中的依赖注入

    点击查看AngularJS系列目录 依赖注入 一般来说,一个对象只能通过三种方法来得到它的依赖项目: 我们可以在对象内部创建依赖项目 我们可以将依赖作为一个全局变量来进行查找或引用 我们可以将依赖传递 ...

  4. AngularJS学习之依赖注入

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

  5. --@angularJS--路由、模块、依赖注入

    以下是演示angular路由切换的demo. 主页:index.html <!doctype html><html ng-app="bookStoreApp"&g ...

  6. AngularJs-MVC之路由、模块以及依赖注入

    前面呢,我们大概的了解了下AngularJs的入门,也做过了hello world的一个demo,不知道大家有没有掌握呢?在下面我们需要讲一些AngularJS的一些干货. 1,一个完整项目的目录结构 ...

  7. AngularJS中的依赖注入

    依赖注入 | Dependency Injection 原文链接: Angular Dependency Injection翻译人员: 铁锚翻译时间: 2014年02月10日说明: 译者认为,本文中所 ...

  8. AngularJS的路由、模块、依赖注入

    AngularJS的路由在实际应用中更多是由另外封装好的angular-ui-router.js实现的! 为什么不用Ajax而要用前端路由?

  9. AngularJS源码分析之依赖注入$injector

    开篇 随着javaEE的spring框架的兴起,依赖注入(IoC)的概念彻底深入人心,它彻底改变了我们的编码模式和思维.在IoC之前,我们在程序中需要创建一个对象很简单也很直接,就是在代码中new O ...

随机推荐

  1. Nginx实现简易泛域名CDN节点

    如何使用Nginx泛域名解析+反向代理+静态资源缓存呢? 安装nginx,安装过程不再赘述,记得带上pcre.gzip.sub.status这几个模块,另外如果想开通在线清理缓存功能,需要安装ngx_ ...

  2. MySQL编译安装错误:No curses/termcap library found的解决方法

    CentOS编译安装MySQL,./coonfigure时出现错误: checking for termcap functions library... configure: error: No cu ...

  3. jsp机制基础

    JSP 和Servlet技术一样,JSP也是SUN公司定义的一种开发动态web资源的技术,属于JavaEE技术之一.JSP实际上就是Servlet,它们在一起又称JSP/Servlet规范. Serv ...

  4. python 选择排序

    选择排序算法的思想,首先第一次先从整个序列中选择最小的数,然后放到第一位,然后再从第二位到最后一位选择出最小的一个数,把这个数放到第二位,然后,再从第三位到最后一位选择其中最小的数放到第三位,这样一直 ...

  5. java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    一个普通的实体Person: private int id; private String name; private Date createdTime;...//其它字段// get set方法 . ...

  6. 新浪微博客户端(63)-使用block进行链式编程

    Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (Person *(^)())study ...

  7. 【9-6】Centos学习笔记

    linux文件系统结构 常用技巧 快捷键启动终端 su命令,使用超级用户登陆 visudo :编辑用户权限 tar xf 文件名:解压文件 Vim编辑器 Tips yum包管理:Yum(全称为 Yel ...

  8. lua 学习

    尽管所有的脚本语言在特定领域都有自己的一席之地,但在游戏开发的世界里,Python 和 Lua 是非常适合的,因为它们可以直接调用C++的功能. lua最让人惊喜的地方应该是它的执行速度,目前没有任何 ...

  9. socket编程报异常java.io.EOFException

    一个客户端连接服务器的小程序,服务器端可以正常读取客户端发来的数据 但是当客户端关闭时,服务端也关闭了,并且抛出如下的异常: java.io.EOFException at java.io.DataI ...

  10. 移动WebApp利用Chrome浏览器进行调试

    详细的请看这个(HBuilder是我长期使用,而且值得支持的国内前端开发编辑器) http://ask.dcloud.net.cn/article/151 http://ask.dcloud.net. ...