Angular元件間怎麼進行通訊?依賴注入是什麼?以下這篇文章帶大家簡單了解元件通訊的方法,並介紹一下依賴注入,希望對大家有幫助!
1. 元件通訊
1.1 傳送資料
##<pre class='brush:php;toolbar:false;'><app-favorite [isFavorite]="true"></app-favorite></pre><pre class='brush:php;toolbar:false;'>// favorite.component.ts
import { Input } from &#39;@angular/core&#39;;
export class FavoriteComponent {
@Input() isFavorite: boolean = false;
}</pre>
注意:在屬性的外面加
[]
[] 表示綁定普通值,在元件內接收後是字串類型。 【相關教學推薦:《
angular教學》】
#1.2 元件向外部傳遞資料
需求:在子元件中透過點擊按鈕將資料傳遞給父元件
<!-- 子组件模板 --> <button (click)="onClick()">click</button>
// 子组件类 import { EventEmitter, Output } from "@angular/core" export class FavoriteComponent { @Output() change = new EventEmitter() onClick() { this.change.emit({ name: "张三" }) } }
<!-- 父组件模板 --> <app-favorite (change)="onChange($event)"></app-favorite>
// 父组件类 export class AppComponent { onChange(event: { name: string }) { console.log(event) } }
#2. 依賴注入
2.1 概述
Dependency Injection ) 簡稱
DI,是物件導向程式設計中的一種設計原則,用來減少程式碼之間的耦合度數
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.2 - ##DI
框架
- Angular
有自己的
DI
框架,它將實作依賴注入的過程隱藏了,對於開發者來說只需使用很簡單的程式碼就可以使用複雜的依賴注入功能。 在
的DI 框架中有四個核心概念:
- :元件要依賴的實例對象,服務實例物件
- Token
:取得服務實例物件的識別碼
- Injector :注入器,負責建立維護服務類別的實例物件並向元件注入服務實例物件。
- Provider
:配置注入器的對象,指定建立服務實例物件的服務類別和取得實例對象的識別。
2.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.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中文網其他相關文章!

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

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

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具