深入理解Angular4中的依賴注入

2022-10-07 08:27:11 字數 1428 閱讀 3130

在angular中使用依賴注入,可以幫助我們實現松耦合,可以說只有在元件中使用依賴注入才能真正的實現可重用的元件。

如果我們有個服務product.service.ts,其中export了乙個productservice類,類中有乙個getproduct方法。

如果不使用依賴注入,假設我們需要在product元件中使用這個服務時就會new乙個productservice類,但如果這個元件被用到了另乙個地方,需要的服務改變了,我們就不得不更改元件中的內容,這樣的元件不能說是可復用的。

一、注入器

angular中的注入器只有一種實現方法就是在建構函式中宣告。

例如在乙個元件中

constructor(productservice: productservice){}

通俗的講這段**的意思就是說,這個元件建立了乙個productservice,而這個productservice是依賴productservice的,這裡的productservice只是乙個token,至於productservice 是什麼,是怎麼實現的,全都是由提供器說明的。

二、提供器

通常提供器定義在應用級,及app.module.ts中,供所有元件或服務使用,當然也可以定義在某乙個元件中,只供這乙個元件使用。

我們以定義在應用級為例:

@ngmodule()

這段**其實這乙個簡寫,全寫為:

@ngmodule(]

})這段**中的provide宣告的就是我們jxpxuxt剛剛在注入器中提過的token,就是說這兩個token是一一對應的,angular會到提供器中找到和注入器相同的token.

**中的useclass是例項化productservice類,及我們幫助我們new 了乙個類出來。除了useclass外,比較常用的還用usefactory,使用工廠模式例項化乙個類。

這時候我們在元件中就可以直接使用productservice類中的方法了。

當token和想要例項化的類名字相同時,我們就可以使用上面那種簡寫的方法。

說了這麼多,那到底怎麼才能體現出可復用性呢?

如果現在我們的product元件用到了另乙個地方需要使用另乙個服務,我們程式設計客棧命名為anotherproductservice。有了依賴注入我們就不必要更改元件,而是更改app.module.ts中的提供器:

@ngmodule()

從這段**可以看出,token並沒有改變,可是這是例項化的類變為了anotherproductservice。

總結來說,當元件在建構函式中說明自己想要依賴乙個類時,angular首先會在這個元件自身找有沒有提供器,如果沒有就去這個元件的父元件中找,如果也沒有找到就去應用級(app.module.ts)中找。找到後,就會按照提供器可說明的為元件注入它想要的。

本文標題: 深入理解angular4中的依賴注入

本文位址: /ruanjian/j**a/193067.html

Angular4中自定義管道

angular 是由谷歌開發與維護乙個開發跨平台應用程式的框架,同時適用於手機與桌面。管道的作用是把資料作為輸入,然後轉換它,給出期望的輸出。7.1 使用管道 如 import from angular core component export class herobirthdaycomponen...

Angular4的雙向資料繫結

最近在學angular4,因為angularjs中預設是雙向資料繫結,但是如果在比較複雜的頁面使用的話會引起效能問題,那是因為angularjs會在頁面儲存乙個所有資料繫結的列表,每當資料發生變化時,angularjs都會反覆檢視列表,以保證資料一致性。然後在angular4中預設是單向資料繫結。但...

Angular4學習 模組化再理解 3

惰性載入也就是懶載入,或者說延遲載入,一些模組使用懶載入後,只有當使用者第一次導航到這個模組時,才會載入一些特性。這對於應用程式的效能和減小初始包的大小有很大的幫助,其設定也非常簡單。import from angular core import from angular router export...