Π¨ΡΠΌΠΈΡ Π° Π²ΠΎΠΊΡΡΠ³ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Angular Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½Π°. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Angular, Π½Π°Π΄Π΅ΡΡΡ, Π²Ρ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅ ΠΎΡΠ²Π΅Ρ. Signal ΡΡΠ°Π½Π΅Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠ΅ΠΉ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π‘Π΅ΠΉΡΠ°Ρ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ°ΡΠ΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ². ΠΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ.
ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ: ΠΊΠ°ΠΊΠΎΠ²ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ Π±ΡΠ΄ΡΡΠ΅Π΅?
Angular Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° Zone js Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Zone Js Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ API, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ Π² JavaScript Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΉ Π²Π΅Π±-API, ΡΠΎ Zone J Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΡΠ΅ΠΌ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ API, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Zone J Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π·ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² DOM, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠ²Π΅ΡΡ
Ρ Π²Π½ΠΈΠ·, ΡΡΠΎΠ±Ρ Π²ΡΡΠ²ΠΈΡΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±Ρ
ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ OnPush
change.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π½ΡΠ°Π²ΡΡΡΡ Π±Π΅ΡΠ·ΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅.
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Angular Π½Π°ΡΠ°Π» ΠΏΠ΅ΡΠ΅ΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ°Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
Π‘ΠΈΠ³Π½Π°Π»Ρ ΠΏΡΠΈΠ½ΠΎΡΡΡ Angular ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°.
- ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
- Π£Π΄Π°Π»ΡΠ΅Ρ ΠΎΠ±Ρ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·. ΠΠ½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π».
- ΠΠΈΠΊΠ°ΠΊΠΈΡ Π³ΡΡΠ·Π½ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²/API.
Π‘ΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΠ³Π»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΡΠΈΠ³Π½Π°Π»Π° Angular.
- Π‘ΠΈΠ³Π½Π°Π»
- ΠΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠΈΠ³Π½Π°Π»
- ΠΡΡΠ΅ΠΊΡ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΠ³Π½Π°Π»?
Signal β ΡΡΠΎ Π»Π΅Π³ΠΊΠ°Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΠ½ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ signal
.
export class AppComponent { count = signal(0); }
ΠΠ΅ΡΠΎΠ΄ set
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ resetView
.
export class AppComponent { count = signal(0); resetView() { this.count.set(0); } }
ΠΠ΅ΡΠΎΠ΄ update
ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
export class AppComponent { count = signal(0); addView() { this.count.update(val => val + 1); } resetView() { this.count.set(0); } }
mutate
ΠΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ ΠΌΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π» Π½Π° Π΅Π³ΠΎ ΠΌΠ΅ΡΡΠ΅ ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡ ΠΎ Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
ΠΡΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΈΠ³Π½Π°Π»Π°
ΠΡΡΠ³Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΡΠΈΠ³Π½Π°Π»Π° β ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΈΠ³Π½Π°Π»Π°. ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠΉ ΡΠΈΠ³Π½Π°Π» β ΡΡΠΎ Π΄Π°Π²Π½ΠΎ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² Angular, ΠΈ Π΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΎΠΏΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ computed
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΈΠ³Π½Π°Π»Π°.
export class AppComponent { count = signal(0); revenue = computed(() => this.count() * 0.5); addView() { this.count.update(val => val + 1); } resetView() { this.count.set(0); } }
ΠΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
- ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π»Π΅Π½ΠΈΠ²ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
- ΠΠ½ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠΈΠ²Π°Π΅Ρ Π³ΡΠ°ΡΠΈΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Angular ΠΏΡΠΎΡΠ²Π»ΡΠ΅Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΡΡΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π³ΡΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΠΎΠΈΡΡ Π΄ΠΎΡΠΎΠ³ΠΎ.
ΠΡΡΠ΅ΠΊΡ
Π€ΡΠ½ΠΊΡΠΈΡ effect
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° ΠΈΡ
ΠΎΡΠ½ΠΎΠ²Π΅. ΠΡΡΠ΅ΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°Π΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ DOM ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ².
- ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ΅Π²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΡΡΠ΅ΠΊΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΡΠ΅ΠΊΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ ΡΠΈΠ³Π½Π°Π»Π°.
export class AppComponent { count = signal(0); user = signal(0); constructor() { effect(() => { console.log('Empty effect method'); }); effect(() => { console.log('User effect invoked ' + this.user()); }); effect(() => { console.log('User and View effect invoked ' + this.user() + ' ' + this.count()); }); effect(() => { console.log('Count effect invoked ' + untracked(this.count)); }); } addView() { this.count.update(val => val + 1); } userChange() { this.user.update(val => val + 1); } resetView() { this.count.set(0); } }
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΠ³Π½Π°Π»Π°.
effect(() => { console.log('Empty effect method'); });
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΡΡΡΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π° user
.
effect(() => { console.log('User effect invoked ' + this.user()); });
ΠΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠ°.
effect(() => { console.log('User and View effect invoked ' + this.user() + ' ' + this.count()); });
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΈΠ³Π½Π°Π» ΡΡΠ΅ΡΠ°, ΡΠΎΠ³Π΄Π° ΠΎΠ½ ΡΡΠ°Π½Π΅Ρ ΠΈΠ½Π΅ΡΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ count
ΠΎΠ±Π΅ΡΠ½ΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄ untracked
. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΈΠ³Π½Π°Π»Ρ Π²Π½ΡΡΡΠΈ Π½Π΅ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
effect(() => { console.log('Count effect invoked ' + untracked(this.count)); });
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
ΠΠΎΠΌΠ°Π½Π΄Π° angular Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
<div> <span>Unique users: </span> <span>{{users()}}</span> </div>
ΠΠΎΠΌΠ°Π½Π΄Π° Π²ΠΈΠ΄ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°.
Π‘ Π³ΠΎΠ΄Π°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Angular Π½Π°ΡΡΠΈΠ»ΠΈΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π½ΡΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ» ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΡΠΆΠ΅Π»ΡΡ ΡΠ°Π±ΠΎΡΡ, ΡΡΠΎ ΠΎΠΊΠ°Π·Π°Π»ΠΎ Π±Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠΎ ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠ³Π½Π°Π»Π°ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ.
ΠΡΠ΅Π΄ΡΡΠΎΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ β ΡΠΈΠ³Π½Π°Π»Ρ
ΠΡ, ΡΠΈΠ³Π½Π°Π»Ρ Π² Angular β ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠΈΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°, ΠΈ Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π» Π»ΠΈΡΡ ΠΎΡΠ΅Π½Ρ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π΅Π΅ ΡΠ°ΡΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° Angular Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄, ΠΏΠΎΡΠΎΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ, ΡΡΠΎΠ±Ρ ΡΠ»ΡΡΡΠΈΡΡ ΠΎΠΏΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π±Π΅Π·Π·ΠΎΠ½Π°Π»ΡΠ½ΡΡ (ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΈΠ³Π½Π°Π»ΡΠ½ΡΡ ) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΈΡΠ°Π΅ΡΠ΅ ΡΡΡ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π° ΠΌΠ΅Π½Ρ Π·Π΄Π΅ΡΡ ΠΈ Π² Π’Π²ΠΈΡΡΠ΅ΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°.
ΠΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡβ¦