今天收到一件噩耗,覺得一切都無所謂了,鐵人賽就平平穩穩地發文吧。
先來看官方文件解說:
- Signal 是對值的套件裝器,當該值發生變化時,它會通知感興趣的使用者。Signal 可以包含任何值,從原始型別到複雜的資料結構。
- 你可以透過呼叫
signal的getter函式來讀取其值,這允許 Angular 跟蹤signal的使用位置。- Signal 可以是可寫的,也可以是只讀的。
ref():首先我們會宣告一個 signal,並給予初始值。
以下的例子便是:宣告一個名為 quantity 的 Signal(訊號狀態),它的初始值是數字 0。
export class AppComponent {
readonly quantity = signal<number>(0);
}
set、update 兩種方法。this.xxx() 的方法。// 可寫性:
this.quantity.set(100);
this.quantity.update(value => value + 100);
// 可讀的:
console.log(this.quantity());
與 Vue 的 computed 概念相同:用來處理資料運算並快取結果的屬性,當相依的原始資料改變時才會重新計算。
return 回傳計算後的結果。effect(()=>{})。readonly quantity = signal<number>(0);
docbleQty = computed(() => this.quantity() * 2);
若說 computed() 改變的是畫面上的結果,effect() 影響的便是畫面外的事情,寫在函式裡的 Signal 的值發生改變,effect() 就會自動重新執行,會隨著元件被銷毀時自動被回收。
export class AppComponent {
readonly quantity = signal<number>(0);
constructor() {
effect(() => {
console.log(`數量: ${this.quantity()} 個`);
});
}
}
Angular Signal 的學習就到這邊啦!
更多內容可以到官方文件閱讀唷~。
另外,我的好朋友安東尼也開啟 Angular 系列的鐵人賽文章了,歡迎大家蒞臨:Angular 22 Signal 進化論