javascript
AngularJS依赖注入
文中內容基本上來自《AngularJS權威教程》
一個對象通常有三種方式可以獲得對其依賴的控制權:
依賴注入是通過第三種方式實現的。依賴注入是一種設計模式,它可以去除對依賴關系的硬編碼,從而可以在運行時改變甚至移除依賴關系。
在運行時修改依賴關系的能力對測試來講是非常理想的,因為它允許我們創建一個隔離的環境,從而在測試環境可以使用模擬的對象取代生產環境中的真實對象。從功能上來看,依賴注入會事先自動查找依賴關系,并將注入目標告知被依賴的資源,這樣就可以在目標需要時立即將資源注入進去。在編寫依賴于其它對象或庫的組件時,我們需要描述組件之間的依賴關系。在運行期,注入器會創建依賴的實例,并負責將它傳遞給依賴的消費者。
基于以上原因,AngularJS使用$injector(注入器服務)來管理依賴關系的查詢和實例化。事實上,$injector負責實例化AngularJS中所有組件,包括應用的模塊、指令和控制器等。
在運行時,任何模塊啟動時$injector都會負責實例化,并將其需要的所有依賴傳遞進去。
下面是一個簡單的示例
angular.module('myApp', [])
.factory('greeter', function() {
return {
greet: function(msg) {alert(msg); }
}
})
.controller('myController',function($scope, greeter) {
$scope.sayHello = function() {
greeter.greet("hello");
};
});
當AngularJS實例化這個模塊時,會查找greeter并自然而然的把對它的引用傳遞進去。
<div ng-app="myApp">
<div ng-controller="myController">
<button ng-click="sayHello()">Hello</button>
</div>
</div>
推斷式注入聲明
如果沒有明確聲明,AngularJS會假定參數名稱就是依賴的名稱。
顯式注入聲明
可以通過$inject屬性來實現顯式注入聲明的功能,函數對象的$inject屬性是一個數組,數組元素的類型是字符串,它們的值就是需要被注入的服務的名稱。這種聲明方式參數的順序非常重要。
行內注入聲明
AngularJS提供的注入聲明的最后一種方式,是可以隨時使用的行內注入聲明。這種方式其實是一個語法糖,它同前面提到的通過$inject屬性進行注入聲明的原理是一樣的,但允許我們在函數定義時從行內將參數傳入。此外它可以避免在定義過程中使用臨時變量。
在定義一個AngularJS的對象時,行內聲明的方式允許我們直接傳入一個參數數組而不是一個函數。數組的元素是字符串,它們代表的是可以被注入到對象中的依賴的名字,最后一個參數就是依賴注入的目標函數對象本身。
例如:
angular.module('myApp')
.controller('myController',['$scope', 'greeter', function($scope, greeter) {}]);
語法糖(Syntactic sugar)
是由英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯的機會。
轉載于:https://www.cnblogs.com/1000px/p/4670496.html
總結
以上是生活随笔為你收集整理的AngularJS依赖注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己用到的vim常用命令
- 下一篇: Struts2自定义Result处理JS