AngularJS学习之依赖注入

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>

时间: 2024-10-05 20:57:36

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

angularjs学习:依赖注入

1. AngularJS使用 $injetor(注入器服务)来管理依赖关系的查询和实例化.事实上, $injetor负责实例化AngularJS中所有的组件,包括应用的模块.指令和控制器等.在运行时, 任何模块启动时$injetor都会负责实例化,并将其需要的所有依赖传递进去. 以在需要的地方通过参数进行传递的方式来进行依赖注入的. 在内部, AngularJS的处理过程是下面这样的: // 使用注入器加载应用 var injector = angular.injector(['ng', 'my

转: 理解AngularJS中的依赖注入

理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Provider服务($provide) $provide服务负责告诉Angular如何创造一个新的可注入的东西:即服务(service).服务会被叫做provider的东西来定 义,你可以使用$provide来创建一个provider.你需要使用$provide中的provider方法来定义一个provi

Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea

文章大纲 在xml中声明bean和注入bean 在xml中声明bean和自动注入bean 自动扫描bean和自动注入bean 对自动扫描bean增加约束条件 首次接触spring请参考 Spring 3.0 学习-环境搭建和三种形式访问 1.典型的Spring XML 配置文件表头 <?xml version="1.0" encoding="UTF-8"?><!-- 一般化的Spring XML 配置 --> <beans xmlns=

AngulerJS学习(二) 依赖注入

简介: 首先我们需要理解什么是依赖注入? 控制反转和依赖注入有什么区别? 假定:应用程序A,需要访问外部资源C.这里使用了容器B(是指用来实现 IOC/DI 功能的一个框架程序). A需要访问C B获取C然后返回给A IOC inversion of control 控制反转:站在容器角度.B控制A,由B反向的向A注入C.即容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源. DI Dependency Injection 依赖注入:站在应用程序的角度.A依赖B获取C,B将C注

2.3了解AngularJS模块和依赖注入

1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 可通过定义其提供的对象构建模块.通过依赖注入将模块连接在一起,构建一个完整的应用程序. AngularJS建立在模块原理上.大部分AngularJS提供的功能都内置到ng-*模块中. 2.依赖注入 定义依赖对象并动态地把它注入另一个对象,使得所有的依赖对象所提供的功能都能使用.(提供器 注入器服务)

详解AngularJS中的依赖注入

依赖注入 一般来说,一个对象只能通过三种方法来得到它的依赖项目: 我们可以在对象内部创建依赖项目 我们可以将依赖作为一个全局变量来进行查找或引用 我们可以将依赖传递到需要它的地方 在使用依赖注入时,我们采用的是第三种方式(另外两种方式都会引起其他困难的挑战,例如污染全局作用域以及使隔离变得几乎不可能).依赖注入是一种设计模式,它移除了硬编码依赖,因此使得我们可以在运行中随时移除并改变依赖项目. 在运行过程中能够修改依赖项目的能力允许我们创建隔离环境,这对于测试来说是非常理想的.我们可以用测试环境

Spring学习——DI(依赖注入)

IOC容器,处理对象依赖关系 IOC与DI: IOC :是一个容器,创建对象的容器 DI :在容器创建对象后,处理对象的依赖关系,也叫依赖注入! 方式1:通过set方法注入值 可以给普通属性.集合属性注入值: 1. 必须提供set方法 2. 配置中通过bean的property子节点,给对象属性注入值: 1 <!-- 2 依赖注入,即处理对象的依赖关系!给对象的属性设置值! 3 --> 4 <!-- 1) 给对象属性赋值(通过构造函数)--> 5 <bean id="

SSH学习九 依赖注入

依赖注入(DI)和控制反转(IoC),意思是一样的 传统方式中,如果JAVA实例A需要另一个实例B,那么需要new B(),然后给A用,也就是有调用者A创建被调用者B的实例 依赖注入模式下:创建被调用者B的工作不再由A完成,而是由Spring容器完成(或者说工厂模式的工厂完成),然后注入调用者,因此也成为依赖注入,因为A和B是依赖关系. 依赖注入有两种方式: (1)设值注入 Spring通过Set方法为类A的成员注入值. (2)构造注入 通过构造器注入. 例子如下: 代码逻辑: Service通

spring学习笔记-依赖注入

学习过程访问的地址,按顺序理解: [email protected]注解与自动装配 spring四种依赖注入方式 Spring注解注入 <context:component-scan>使用说明 详细:Spring零配置通过注解实现Bean依赖注入总结