angular學習之聊聊依賴注入
什麼是依賴注入?這篇文章帶大家了解一下angular中的依賴注入(DI),詳細介紹AngularDI框架的兩個核心概念:注入器 Injectors和提供者 Provider,希望對大家有幫助!
angular中的依賴注入(DI)
1、概述
依賴注入( Dependency Injection ) 簡稱DI
,是物件導向
程式設計中的一種設計原則
,用來減少程式碼之間的耦合度。 【相關教學推薦:《angular教學》】
class MailService { constructor(APIKEY) {} } class EmailSender { mailService: MailService constructor() { this.mailService = new MailService("APIKEY1234567890") } sendMail(mail) { this.mailService.sendMail(mail) } } const emailSender = new EmailSender() emailSender.sendMail(mail)
EmailSender 類別執行時要使用 MailService 類,EmailSender 類別依賴 MailService 類,MailService 類別是 EmailSender 類別的依賴項。
以上寫法的耦合度太高,程式碼並不健全。如果 MailService 類別改變了參數的傳遞方式,在 EmailSender 類別中的寫法也要跟著改變。
class EmailSender { mailService: MailService constructor(mailService: MailService) { this.mailService = mailService; } } const mailService = new MailService("APIKEY1234567890") const emailSender = new EmailSender(mailService)
在實例化 EmailSender 類別時將它的依賴項透過 constructor 建構函式參數的形式註入到類別的內部,而這種寫法就是依賴注入。
透過依賴注入降了程式碼之間的耦合度,增加了程式碼的可維護性。 MailService 類別中程式碼的變更再也不會影響 EmailSender 類別。
2、DI 框架
Angular 有自己的DI 框架
,它將實作依賴注入的過程隱藏
了,對於開發者來說只需使用很簡單的程式碼就可以使用複雜的依賴注入功能。
在Angular 的DI 框架中有四個核心概念:
#Dependency
:元件要依賴的實例對象,服務實例物件Token
:取得服務實例物件的識別碼#Injector
:注入器,負責建立維護
服務類別的實例物件並向元件中注入
服務實例物件(管理服務物件的建立和取得)。Provider
:配置注入器的對象,指定建立服務實例物件的服務類別和取得實例對象的識別。 (Provider:提供者)
2.1 注入器Injectors
注入器負責建立服務類別實例對象,並將服務類別實例物件注入到需要的組件中。
建立注入器
import { ReflectiveInjector } from "@angular/core" // 服务类 class MailService {} // 创建注入器并传入服务类 const injector = ReflectiveInjector.resolveAndCreate([MailService])
登入後複製取得注入器中的服務類別實例物件
const mailService = injector.get(MailService)
登入後複製服務實例物件為單例模式,注入器會在建立服務實例後會對其進行快取
const mailService1 = injector.get(MailService) const mailService2 = injector.get(MailService) console.log(mailService1 === mailService2) // true
登入後複製#不同的注入器傳回不同的服務實例物件
const injector = ReflectiveInjector.resolveAndCreate([MailService]) const childInjector = injector.resolveAndCreateChild([MailService]) const mailService1 = injector.get(MailService) const mailService2 = childInjector.get(MailService) console.log(mailService1 === mailService2) // false
登入後複製服務實例的查找類似函數
作用域鏈
,當前級別可以找到就使用當前級別,當前級別找不到去父級中查找const injector = ReflectiveInjector.resolveAndCreate([MailService]) const childInjector = injector.resolveAndCreateChild([]) const mailService1 = injector.get(MailService) const mailService2 = childInjector.get(MailService) console.log(mailService1 === mailService2) // true
登入後複製
#2.2 提供者Provider
設定注入器的對象,指定了建立實例物件的服務類別和存取服務實例物件的識別。
const injector = ReflectiveInjector.resolveAndCreate([ { provide: MailService, useClass: MailService } ])
登入後複製存取依賴物件的識別也可以是字串型別
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "mail", useClass: MailService } ]) const mailService = injector.get("mail")
登入後複製useValue
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "Config", useValue: Object.freeze({ APIKEY: "API1234567890", APISCRET: "500-400-300" }) } ]) const Config = injector.get("Config")
登入後複製將實例物件和外部的參考建立了鬆散耦合關係,外部透過識別獲取實例對象,只要標識保持不變,內部代碼怎麼變都不會影響到外部。
更多程式相關知識,請造訪:程式設計影片! !
以上是angular學習之聊聊依賴注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

這篇文章帶大家繼續angular的學習,簡單了解一下Angular中的獨立組件(Standalone Component),希望對大家有幫助!

angular中怎麼使用monaco-editor?以下這篇文章記錄下最近的一次業務中用到的 monaco-editor 在 angular 中的使用,希望對大家有幫助!

這篇文章跟大家分享一個Angular實戰,了解一下angualr 結合 ng-zorro 如何快速開發一個後台系統,希望對大家有幫助!

隨著網路的快速發展,前端開發技術也不斷改進與迭代。 PHP和Angular是兩種廣泛應用於前端開發的技術。 PHP是一種伺服器端腳本語言,可以處理表單、產生動態頁面和管理存取權限等任務。而Angular是一種JavaScript的框架,可以用來開發單一頁面應用程式和建構元件化的網頁應用程式。本篇文章將介紹如何使用PHP和Angular進行前端開發,以及如何將它們

Angular框架中元件的預設顯示行為不是區塊級元素。這種設計選擇促進了元件樣式的封裝,並鼓勵開發人員有意識地定義每個元件的顯示方式。透過明確設定CSS屬性 display,Angular組件的顯示可以完全控制,從而實現所需的佈局和響應能力。
