Dependency Injection (DI) 基礎概念
什麼是 DI?
依賴注入(DI)是一種設計模式,讓你不需要手動創建依賴項的實例。相反,你告訴 Angular 你需要什麼,Angular 會:
自動創建實例
管理實例的生命週期
在需要的地方提供這個實例
DI 的好處
避免手動創建實例
確保服務是單例(Singleton)模式,在不同 component 中共享同一個實例
避免狀態不同步的問題(因為使用同一個實例)
如何使用 DI
注入依賴的兩種方式
1. Constructor 注入(傳統方式)
constructor(private taskService: TaskService) { }
2. inject 函數(新方式,Angular 14+)
private taskService = inject(TaskService);
inject 函數的優點:
更簡潔的語法
不需要使用 constructor
特別適合在 standalone components 中使用
1. 在服務類別上使用 @Injectable
@Injectable({
providedIn: 'root' // 告訴 Angular 這個服務在整個應用程式中是單例的
})
export class TaskService {
// 服務的實作...
}
2. 在 Constructor 中注入
constructor(private taskService: TaskService) { }
存取修飾詞說明
private
: 只能在該類別內部訪問public
: 可以在類別內部和外部(包括模板)訪問protected
: 只能在該類別及其子類別中訪問
重要觀念
Constructor 是在類別被實例化時自動執行
@Injectable() 裝飾器讓 Angular 知道這個類別可以被注入到其他類別中
providedIn: 'root' 確保服務在整個應用中是單例的
Last updated