Web Components & Shadow DOM
Last updated
Was this helpful?
Last updated
Was this helpful?
Веб-компоненты — совокупность стандартов, которая позволяет создавать новые, пользовательские 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: