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>
AngularJS学习之依赖注入的更多相关文章
- 转: 理解AngularJS中的依赖注入
理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Prov ...
- 理解AngularJS中的依赖注入
点击查看AngularJS系列目录 理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS ...
- 详解AngularJS中的依赖注入
点击查看AngularJS系列目录 依赖注入 一般来说,一个对象只能通过三种方法来得到它的依赖项目: 我们可以在对象内部创建依赖项目 我们可以将依赖作为一个全局变量来进行查找或引用 我们可以将依赖传递 ...
- 学习Spring——依赖注入
前言: 又开始动笔开了“学习Spring”系列的头…… 其实一开始写“学习SpringMVC”的几篇文章是出于想系统的了解下Spring以及SpringMVC,因为平时在公司中虽然每天都在使用Spri ...
- 4.了解AngularJS模块和依赖注入
1.模块和依赖注入概述 1.了解模块 AngularJS模块是一种容器,把代码隔离并组织成简洁,整齐,可复用的块. 模块本身不提供直接的功能:包含其他提供功能的对象的实例:控制器,过滤器,服务,动画 ...
- Spring框架学习之依赖注入
Spring框架从2004年发布的第一个版本以来,如今已经迭代到5.x,逐渐成为JavaEE开发中必不可少的框架之一,也有人称它为Java下的第一开源平台.单从Spring的本身来说,它贯穿着整个表现 ...
- Spring 学习笔记 ----依赖注入
依赖注入 有三种方式,本文只学习下属性注入. 属性注入 属性注入即通过 setXxx方法()注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入方式是 ...
- net5学习笔记---依赖注入
小王的故事 小王去上班 小王是个程序员,每个工作日他都要去上班,诸多交通工具他最喜欢的交通工具是骑电车.在骑行的过程中放空自己使他很快. 突然有一天天气预报说近期有很大的雨,小王再想骑电车去上 ...
- Spring学习笔记--依赖注入
依赖注入和控制反转:http://baitai.iteye.com/blog/792980出自李刚<轻量级 Java EE 企业应用实战> Java应用是一种典型的依赖型应用,它就是由一些 ...
随机推荐
- R语言排序:sort(),rank(),order()示例
> x<-c(97,93,85,74,32,100,99,67) > sort(x) [1] 32 67 74 85 93 97 99 100 > order(x) [1] 5 ...
- asp rs开启关闭问题
使用rs.close关闭后,可以直接用rs.open来打开数据表:如果用了set rs = nothing 从内存中清除rs对象,再次加载rs对象就需要使用set rs=server.createob ...
- Matlab中double,im2double,mat2gray区别
转载:http://blog.sina.com.cn/s/blog_6c41e2f30101559d.html ****************假设某图像数据A(uint8格式)*********** ...
- 几款开源ESB总线的比较
现有的开源ESB总线中,自从2003年第一个开源总线Mule出现后,现在已经是百花争鸣的景象了.现在我就对现有的各种开源ESB总线依据性能.可扩展性.资料文档完整程度以及整合难易程度等方面展开. CX ...
- Pandas-数据整理
Pandas包对数据的常用整理功能,相当于数据预处理(不包括特征工程) 目录 丢弃值 drop() 缺失值处理 isnull() & notnull() dropna() fillna() 值 ...
- wind的R接口、况客RSDK学习,双冒号以及quantmod主题
本文主要参考:来自segmentfault上的FinanceR的专栏 https://segmentfault.com/a/1190000004580610 并自己对生疏不解之处做了补充和注释. 当然 ...
- vijos1531 食物链
背景 安徽省芜湖市第二十七中学测试题 NOI 2001 食物链(eat) Description:OfficialData:OfficialProgram:JackDavid127 描述 动物王国中有 ...
- ASP.NET 系统对象 Request(一)
Request对象 用来获取客户端在请求一个页面或传送一个Form是提供的所有信息.它包括用户的HTTP变量.能够识别的浏览器.存储客户端的Cookie信息和请求地址等. Request对象是Syst ...
- pathinfo()、dirname()、basename()获得文件的路径,名称等信息说明
在PHP中,若想通过函数获得一个文件的路径.名称,或者是扩展名等,是非常容易的一件事.可以使用dirname().basename().pathinfo()等多种途径获得相应的信息. 假设现在有一个图 ...
- C和指针 第十一章 习题
1编写calloc,内部使用malloc函数获取内存 #include <stdio.h> #include <stdlib.h> void *myAlloc(unsigned ...