AngularJS 模組化與依賴注入

2021-07-16 09:17:01 字數 2447 閱讀 5555

angularjs

使用模組化的組織方式,和依賴注入的設計。這使得模組之間耦合度較低,模組更容易復用。同時支援宣告式的程式設計風格。 在你建立angular module 或者 service 之前,首先需要了解一下 angular module 和 service 的工作方式。

在angular中,乙個module通常對應乙個js檔案,其中可以包括controller、service、filter、directive等。 下面我們宣告乙個模組:

,並在其中宣告乙個controller:worldctrl,乙個directive:customer,和乙個filter:count

接著在模板中,使用上面宣告的

在angular中,directive、service、filter、controller都是以工廠方法的方式給出,而工廠方法的引數名對應著該工廠方法依賴的service。如: .

在上述的function執行之前,angular injector會生成乙個$scope的例項和$http的例項,並傳入該方法。 如果你希望對js進行壓縮處理,那麼引數名就可能發生變化,angular injector將不能夠正確地注入依賴的service。於是有另外一種寫法: .

以字串陣列的形式來宣告依賴項,因為字串常量不會被壓縮。

除此之外,還可以設定$inject屬性顯式地宣告controller的依賴:

);如上所述,service以依賴注入的方式被 controller、filter、directive 或其他 service 使用。service 是 angular 中最常見的**復用機制。 本節便來探索如何建立自己的 service。

.factory

('someservice'

,function

(dependency1

,...)

});

someservice被依賴時,angular injector 會呼叫上述工廠方法,將返回值作為service的例項傳入依賴它的工廠方法。

.service

('someservice'

,someservice

(dependency1

,...));

someservice被依賴時,angular injector 會以new的方式呼叫該建構函式,將返回值作為 service 的例項傳入依賴它的工廠方法。

.value

('someservice',);

.constant

('anotherservice'

,'i am a ****** string');

通常在啟動乙個

之前,需要通過jquery讀取靜態渲染的一些環境變數,以valueconstant

顯然,constantvalue的區別在於是否允許修改。

上述的 service 構建方式都是 service provider 的特例,事實上它們都是呼叫 service provider 來實現 service 宣告的。下面給出乙個典型的 service provider 宣告: .

provider

('someservice'

,function

someserviceprovider

()this

.$get

=function

(dependency1

,...)

}});

同時 service provider 是可配置的: .

config

(function

(someserviceprovider

));

angular js中的模組化

模組 module 及模組中註冊物件 模組將醜陋的 全域性定義的控制器模組化,目前 如下 1 var helloctrl function scope 模組化的 如下 angular.module hello controller helloctrl function scope 像module 一...

模組化InnoSetup依賴項安裝

原文在這裡 說明 源 是模組化的,結構如下 你需要把所需的模組在頂部使用 include命令包含在源 中,例如 include scripts products dotnetfx11.iss 然後你只需要在 code 段呼叫它們的main函式,如 dotnetfx11 你很可能需要調整setup.i...

理解模組化和依賴管理 一

應用本身也可以分解成為多個相互互動的小部分,學習封裝 的技能,把 視作自成一體的元件,學習如何設計優秀的介面,如何安排介面 學習如何隱藏資料,只開放使用者需要的部分。如何解析依賴,避免手動維護一組有序的script標籤。封裝是為了讓功能自成一體,隱藏實現的細節。任何 不管是函式還是模組,都要有明確的...