Web Components & Shadow DOM
ΠΠ΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ β ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ HTML-ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ DOM ΠΈ ΡΡΠΈΠ»ΡΠΌΠΈ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (Custom Elements):
ΠΠ²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ β Β«ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½ΠΎΠ²ΡΠ΅Β» ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ
HTMLElement
.ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ β ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ
HTMLButtonElement
ΠΈ Ρ.ΠΏ.
Π ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ ΡΠ΅Π³Π΅ script
, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠΎΡΠΎΡΡΠΉ c ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° customElements.define()
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π·Π° ΡΠ΅Π³ΠΎΠΌ my-webcomp
.
Π Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊΠΎΠ΄ Π² ΠΌΠ΅ΡΠΎΠ΄ connectedCallback()
ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ»ΠΈ Π΅Π³ΠΎ Π²ΡΠ·ΠΎΠ² ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π² Π΄Π΅ΡΠ΅Π²ΠΎ.
CΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ΄ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
connectedCallback
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ (Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠ½ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΠ½ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½);disconnectedCallback
β Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡconnectedCallback
;attributeChangeCallback
ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈΠ· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ:
ΠΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ id ΡΡΠΈΡΠ°Π»ΠΎΡΡ Π΄ΡΡΠ½ΡΠΌ ΡΠΎΠ½ΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΌΠ°Ρ ΠΊΠΎΠ΄Π° ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ, Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΡΠ΅Π½Π΅Π²ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ id, ΡΡΠΈΠ»ΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ Π±Π΅Π· ΠΎΠΏΠ°ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅Π½Π΅Π²ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠΏΡΡΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ helloLabel
, Π° Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠΆΠ΅ 2 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ. Π ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ°Π²Π΄Π° Π²ΡΠ΅ DOM ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ this
ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° this.shadowRoot
Π±Π»Π°Π³ΠΎ ΠΈΡ
ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ.
Useful links:
Last updated