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

该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦合,并遵循了依赖反转和单一的职责原则,与服务定位器模式形成直接对比的是,它允许客户端了解如何使用系统找到依赖;

2.一句话:没事你不要来找我,有事我会去找你;

3.AngularJS提供了很好地依赖注入,以下5个核心组件用来作为依赖注入:

**Value:一个简单的javascript对象,用于向控制器传递值(配置阶段):

var mainApp=angular.module("mainApp",[]);         //定义一个模块

mainApp.value("defaultInput",5);                         //创建vlaue对象,对象“defaultInput并传递数据”

.....

mainApp.controlller('CalcController',function($scope,CalcService,defaultInput){          //讲“defaultInput”注入到控制器

  $scope.number=defaultInput;

  $scope.result=CalcService.square($scope.number);

  $scope.square=function(){

    $scope.result=CalcService.square($scope.number);

  }

});

**factory:一个函数,用于返回值,在service和controller需要时创建,通常使用factory函数计算或返回值;

var mainApp=angular.module("mainApp",[]);        //定义一个模块

mainApp.factory('MathService',function(){            //创建factory“MathService”用于两个数的乘积

  var factory={};

  factory.multiply=function(a,b){

    return a*b;

  }

  return factory;

});

mainApp.service('CalcService',function(MathService){

  this.square=function(a){

    return MathService.multiply(a,a);

  }

});

**provider:AngularJS中通过provider创建一个service,factory等(配置阶段),Provider中提供了一个factory方法get(),它用于返回value/service/factory;

var mainApp=angular.module("mainApp",[]);         //定义一个人模块

mainApp.config(function($provide){                      //使用provider创建service定义一个方法用于计算两数乘积

  $provide.provider('MathService',function(){

    this.$get=function(){

      var factory={};

      factory.multiply=function(a,b){

        return a*b;

      }

      return factory;

    };

  });

});

**constant:constant(常量)用来在配置阶段传递数值,注意这个常量在配置阶段是不可用的;

mainApp.constant("configParam","constant value");

HTML页面:
<div ng-app="mainApp" ng-controller="CalcController">

  <p>输入一个数字:<input type="number" ng-model="number"/></p>

  <button ng-click="square()">X<sup>2</sup></button>

  <p>结果:{{result}}</p>

</div>

<script src=http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js></script>

<script>

  var mainApp=angular.module("mainApp",[]);

  mainApp.config(function($provide){

    $provide.provider('MathService',function(){

      this.$get=function(){

        var factory={};

        factory.multiply=function(a,b){

          return a*b;

        }

        return factory;

      };

    });

  });

  mainApp.value("defaultInput",5);

  mainApp.factory('MathService',function(){

    var factory={};

    factory.multiply=function(a,b){

      return a*b;

    }

    return factory;

  });

  mainApp.service('CalcService',function(MathService){

    this.square=function(a){

      return MathService.multiply(a,a);

    }

  });

  mainApp.controller('CalcController',function($scope,CalcService,defaultInput){

    $scope.number=defaultInput;

    $scope.result=CalcService.square($scope.number);

    $scope.square=function(){

      $scope.result=CalcService.square($scope.number);

    }

  });

  </script>

</body>

</html>

AngularJS学习之依赖注入的更多相关文章

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

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

  2. 理解AngularJS中的依赖注入

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

  3. 详解AngularJS中的依赖注入

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

  4. 学习Spring——依赖注入

    前言: 又开始动笔开了“学习Spring”系列的头…… 其实一开始写“学习SpringMVC”的几篇文章是出于想系统的了解下Spring以及SpringMVC,因为平时在公司中虽然每天都在使用Spri ...

  5. 4.了解AngularJS模块和依赖注入

    1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 ...

  6. Spring框架学习之依赖注入

    Spring框架从2004年发布的第一个版本以来,如今已经迭代到5.x,逐渐成为JavaEE开发中必不可少的框架之一,也有人称它为Java下的第一开源平台.单从Spring的本身来说,它贯穿着整个表现 ...

  7. Spring 学习笔记 ----依赖注入

    依赖注入 有三种方式,本文只学习下属性注入. 属性注入       属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...

  8. net5学习笔记---依赖注入

    小王的故事 小王去上班 ​ 小王是个程序员,每个工作日他都要去上班,诸多交通工具他最喜欢的交通工具是骑电车.在骑行的过程中放空自己使他很快. ​ 突然有一天天气预报说近期有很大的雨,小王再想骑电车去上 ...

  9. Spring学习笔记--依赖注入

    依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...

随机推荐

  1. ionic ios 左滑 白屏

    之前发现ionic在发布ios之后,左滑屏幕的时候会出现界面变白,但是画面原有的位置点击还是有效的,但是点击之后界面是不正确的,返回到上上一步 然后查找资料发现是ios系统内置的左滑动作造成了影响,修 ...

  2. Web jquery表格组件 JQGrid 的使用 - 全部代码

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  3. ab 轻量的压测工具

    阅读:http://www.cnblogs.com/luminji/archive/2011/09/02/2163525.html

  4. 【转】段错误调试神器 - Core Dump详解

    from:http://www.embeddedlinux.org.cn/html/jishuzixun/201307/08-2594.html 段错误调试神器 - Core Dump详解 来源:互联 ...

  5. C# 中的委托和事件(转)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  6. JSP入门

    JSP简介 所谓JSP就是在网页文件中嵌入Java代码或JSP定义的一些标记.JSP是建立在Servlet上的,在执行时JSP容器会先将JSP文件转换成Servlet文件以及class 文件,然后再执 ...

  7. Linux 等待进程结束 wait() 和 waitpid()

    若子进程先于父进程结束时,父进程调用wait()函数和不调用wait()函数会产生两种不同的结果: --> 如果父进程没有调用wait()和waitpid()函数,子进程就会进入僵死状态. -- ...

  8. mysqldump

    $ mysqldump -uroot -p ott_cibn_cms2_staging > /opt/app/ruby/ott-cibn-cms-2.0/current/public/db.sq ...

  9. 2016年11月24日--面向对象、C#小复习

    面对对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象.对同类对象抽象出其共性,形成类.类中的大多数数据,只能用本类的方法进行处理.类通过一个简单的外部接口与外界发生关系,对象 ...

  10. Find All Numbers Disappeared in an Array

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...