我的觀點是 Signal 是 Angular 的現在與未來。
我的理由:
viewChild.required()
、viewChildren()
、contentChild.required()
和 contentChildren()
查詢元素。 ngAfterViewInit
和 ngAfterContentInit
在極少數情況下使用。markForCheck
標誌變髒,隨後的 change detection 會更新組件的 範本。自從採用 signal 以來,我使用 effect
的次數比 ngOnChanges
方法還要多。signal
和 signal inputs
是 type-safe 的並消除了棘手的錯誤。例如,signal(1)
推斷類型是數字,或 signal<T>()
宣告它需要 T
類型。另一方面, viewChild.required()
、viewChildren()
、viewChild()
、contentChild()
、contentChild.required()
、contentChildren()
函數可以使用 read
選項來提供準確的類型。signal
在 Zoneless Angular 中發揮著重要作用。 signal
可以直接呼叫 change detection,從而消除基於 zone 的 change detection 的開銷。這減少了套件的大小,提高了效能,並減少了不必要的更新和重新渲染。It looks like #Angular v19 will have a set of signal based migrations with
Signal Inputs
new Outputs
Signal Queries
While I don't expect them to be perfect, they will help a lot to shift exisiting codebases to those new features.
在Angular 19 中,現有的應用程式可以執行內建的Angular schematic,將裝飾器 (decorators) 遷移到 signal 函數。 ngxtension
函式庫可以逐漸淘汰他們的遷移 schematic,這些 schematic 做了同樣的事情以促進遷移。
X tweet:
(https://x.com/Jean__Meche/status/1827088344414593039?t=pAzILz8okbB9wysWsuePGw&s=03)
Angular elements will finally support signal, signa input and the new output function in V19
我希望所有部落格文章和 Stackblitz 演示最終都能說服 Angular 開發人員開始在他們的專案中使用 signal。
鐵人賽的第 30 天到此結束。
參考:
請問,原本生命週期(ngChange或afterViewInit)改成signal後,
監聽從一個變成很多個(ex.每個signal input都一個),
這樣效能會不會反而降低?