依赖注入主要是将一个功能注入到另外一个不想跟的模块里面去, 让这个功能变成这个模块的一部分,叫作依赖注入,相似在一个功能模块中调用另外一个模块(模块化)javascript
只是模块化是在一个调用的里面去主动引入和查找另外一个被调用的模块,而依赖注入是被调用者主动声明,并将本身注入到调用者内部前端
AngularJS的依赖注入主要是将一些功能或者值注入到控制器中,这是实现AngularJS方法扩展的主要方式之一java
模块化与依赖注入的异同:
(关于前端模块化能够看《前端模块化的那些事儿》)angularjs
type | common | differentia |
---|---|---|
模块化 | 解决不一样层面之间的调用关系 | 调用者主动查找被调用者 |
依赖注入 | 解决不一样层面之间的调用关系 | 被调用者声明主动声明,注入到调用者内部 |
依赖注入通常都是使用在纯粹表示功能的地方编程
通常一些表示功能的api咱们均可以提取出来,变成全局,全部AngularJS控制器均可以使用功能模块api
方法复用——面向切面编程app
声明angularjs管理模块模块化
var app = angular.module('app',[])
依赖注入的几种方式函数
使用.value() 前置声明,主要用于定义一些变量this
//能够是值或函数 app.value('MyValue', 'Hello world'); app.value('MyFunc', function() { return 'Samuel say hello to you!' }); app.controller('mycontroller', function($scope, MyValue, MyFunc) { console.log( MyValue ); MyFunc(); });
使用.constant() 前置声明,它与.value()方法相同,主要是实现一些值的定义,但.constant()是静态变量的声明
app.constant('MyName', 'Samuel');//以第一次的赋值为主 app.constant('MyName', 'Sammuueell'); app.constroller('mycontroller', function( $scope, MyName ) { console.log( MyName );//Samuel });
工厂模式.factory(),这是插件形式的扩展
app.factory('MyFactory', function() { return { showName: function() { console.log( 'Samuel' ) }, showAge: function() { console.log( 25 ) } } }); app.controller('mycontrollre', function( $scope, MyFactory ) { MyFactory.showName(); MyFactory.showAge(); });
用.service()注入方法,这是以服务提供的方式实现扩展
app.service('MyService', function() { this.setService = functioin() { } }); app.controller('mycontroller', function( $scope, MyService ) { console.log( MyService ); });
以上就是经过依赖注入给AngularJS进行扩展的基本方式,嚯嚯嚯~
那几眼哪儿去了?
第一眼——AngularJS
第三眼——AngularJS路由