wki上依赖注入的解释:Dependency injection是一种软件设计模式(简称DI),在这种模式下,一个或者更多的依赖(服务)被注入(或者通过引用传递)到一个独立的对象中,然后成为了该独立对象的一部分。
DI分离了客户端依赖本身行为的创建,使得程序设计模式变得松耦合,并遵循依赖反转和单一职责,域服务定位器模式形成了直接的对比,DI允许客户端了解客户端如何使用该系统找到依赖,可以这样理解:没有事你不要来找我,有事我去找你。
AngularJS提供了很好的依赖注入机制,以下5个核心组件用来作为依赖注入:value、factory、service、provider、constant。下面一一简单学习一下。
1、Value
Value是一个简单的JavaScript对象,用来向控制器传递值(配置阶段),如下例子:
var app=angular.modulr("demo",[]);
app.value("defaultinput",5);
app.controller("mycontroller",function($scope,CalcService,defaultinput){
$scope.number=defaultinput;
$scope.result=CalcService.square($scope.number);
$scope.square=function(){
$scope.result=CalcService.square($scope.number);
}
});
2、Factory
factory是一个函数用于返回值。在service和controller需要时创建。通常我们使用factory函数来计算或者返回值。如下使用实例:
var app=angular.module("myapp",[]);
app.factory("MathService",function(){
var factory={};
factory.multiply=function(a,b){
return a*b;
}
return factory;
});
app.service("CalcService",function(MathService){
this.suqare=function(a){
return MathService.multiply(a,a);
}
});
3、provider
AngularJS中通过provider创建一个service、factory等,provider中提供一个factory方法get,用于返回valueservicefactory。
var app=angular.module("app",[]);
app.config(function($provider){
$provider.provider("MathService",function(){
this.$get=function(){
var factory={};
factory.multiply=function(a,b){
return a*b;
}
return factory;
}
});
});
4、constant
constant用来在配置阶段传递数值,但是要注意这个常量在配置阶段是不可用的。
app.constant("configProgram","constant value");