AngularJS基礎 之 依賴注入的幾種方法

2021-08-07 15:53:06 字數 1992 閱讀 3731

angularjs基礎

目錄(?)

[+]

本文參考angularjs權威指南

依賴注入是一種設計模式,它可以去除對依賴關係的硬編碼,從而可以在執行時改變甚至移除依賴關係。

從功能上看,依賴注入會事先自動查詢依賴關係,並將注入目標告知被依賴的資源,這樣就可以在目標需要時立即將資源注入進去。

angularjs使用$injetor(注入器服務)來管理依賴關係的查詢和例項化。

事實上, $injetor負責例項化angularjs中所有的元件,包括應用的模組、指令和控制器等。

在執行時, 任何模組啟動時$injetor都會負責例項化,並將其需要的所有依賴傳遞進去。

如果沒有明確的宣告, angularjs會假定引數名稱就是依賴的名稱。

請注意,這個過程只適用於未經過壓縮和混淆的**,因為angularjs需要原始未經壓縮的引數列表來進行解析。

例子:(宣告了乙個模組和乙個控制器)

.factory('greeter', function

() }

}).controller('mycontroller',function

($scope, greeter) ;

});

ng-controller="mycontroller">

ng-click="sayhello()">hellobutton>

div>

div>

當angularjs例項化這個模組時,會查詢greeter並自然而然地把對它的引用傳遞進去

上面例子效果如下:

angularjs提供了顯式的方法來明確定義乙個函式在被呼叫時需要用到的依賴關係。

通過這種方法宣告依賴,即使在源**被壓縮、引數名稱發生改變的情況下依然能夠正常工作。

.factory('greeter', function

() }

});function

mycontroller

(renamed$scope, renamedgreeter) };

mycontroller.$inject = ['$scope', 'greeter'];

//注意這個語句,我這個例子弄了半天,各種報錯,就是因為這個語句少了

我們給我們的函式設定的引數名稱分別是renamed$scope和renamedgreeter,然後我們在後面使用

mycontroller.$inject=['$scope','greeter'];

顯式的將我們需要的依賴注入到mycontroller函式中;

所以在mycontroller函式中,renamedsc

ope代

表 scope,mycontroller.in

ject

=[′ scope』, 『greeter』];代表greeter

angularjs提供的注入宣告的最後一種方式,是可以隨時使用的行內注入宣告。

允許我們在函式定義時從行內將引數傳入。此外,它可以避免在定義過程中使用臨時變數。

這種方式其實是乙個語法糖,它同前面提到的通過$inject屬性進行注入宣告的原理是完全一樣的

例子:(跟上面的例子一樣,只是修改了js的部分)

.factory('greeter', function

() }

}).controller('mycontroller', ['$scope', 'greeter', function

($scope, greeter) ;

}]);

演示效果還是一樣的,就不貼圖了

由於需要處理的是乙個字串組成的列表,行內注入宣告也可以在壓縮後的**中正常執行。

AngularJS 依賴注入

本篇文章參考自angularjs權威教程。乙個物件通常有三種方式可以獲得對其依賴的控制權。依賴注入是通過第三種方式實現的,其優點在於去除對依賴關係的硬編碼,可以在執行時改變甚至移除依賴關係。第一種方法和第二種,呼叫者和被呼叫者或和生產被呼叫者的工廠耦合在一起,第二種還會汙染全域性作用域。angula...

spring 依賴注入之 Resource注入

public propertyvalues postprocessproperties propertyvalues pvs,object bean,string beanname catch throwable ex return pvs private injectionmetadata fin...

AngularJS 注入依賴基本用法

0.常用的注入依賴方法有value,factory,service,provide 以及constant.1.感覺注入依賴把現有建立的服務作為乙個function的引數,那麼該function就可以使用已有的服務的內部的函式。2.將服務作為物件來看,就是可以呼叫物件的方法。charset utf 8...