Сегодня, когда популярна разработка фронтенд-компонентов, разные фреймворки просто завораживают, одна и та же компания, разные команды могут использовать разные фреймворки. Затем, с точки зрения унифицированного видения, взаимодействия и функции, может потребоваться разработка разных платформ с разными платформами, но когда функции и взаимодействия меняются, их все необходимо разрабатывать синхронно. Это потребление человеческих и материальных ресурсов, а ремонтопригодность не очень хорошая, поэтому есть ли компонент, совместимый со всеми фреймворками и простой в разработке и обслуживании? ТакWeb ComponentsЭто может быть ответ, который вам нужен.
Веб-компоненты — это собственная технология, позволяющая создавать многократно используемые настраиваемые элементы.
концепция
Веб-компоненты — это собственная технология, позволяющая настраивать элементы управления пользовательского интерфейса. Веб-компоненты состоят из четырех технологий.
- Пользовательские элементы
- Тень ДОМ
- HTML-шаблоны
- Импорт HTML
- Пользовательские элементы Набор API-интерфейсов javascript, которые позволяют вам определять пользовательские элементы и их поведение.
customElements.define('jason-custom',
class extends HTMLElement {
constructor() {
super()
let jasonTestElem = document.createElement('div');
jasonTestElem.textContent = this.getAttribute('text');
let shadowRoot = this.attachShadow({mode: 'open'})
.appendChild(jasonTestElem)
}
})
Используйте объект CustomElementRegistry для создания пользовательских элементов, что позволяет зарегистрировать пользовательский элемент.
customElements.define()
Принимает три параметра:
- DOMString создает имя элемента (custom elementИмя должно содержать дефис);
- объект класса поведение класса;
- Объект, содержащий свойство extends, необязательный параметр, указывающий, от какого встроенного элемента наследуется созданный элемент.
Есть два пользовательских элемента:
- Автономные пользовательские элементы
Это независимый элемент, он не наследует какой-либо элемент HTML, вы можете использовать его прямо на странице, например
<jason-elm></jason-elm>
, илиdocument.createElement('jason-elm')
- Настраиваемые встроенные элементы наследуют базовые элементы HTML. При создании необходимо наследовать от базового элемента HTML. При использовании необходимо передать базовый элемент.
is
Атрибут указывает имя. Например<p is='jason-elm'></p>
, илиdocument.createElement('p', { is: 'jason-elm'})
пример:
Autonomous custom elements
class JasonCustom extends HTMLElement {
constructor() {
super()
let divElem = document.createElement('div')
divElem.textContent = 'This is a test Autonomous custom element'
let shadowRoot = this.attachShadow({mode: 'open'})
shadowRoot.appendChild(divElem)
}
}
customElements.define('jason-custom', JasonCustom)
Затем мы можем использовать его на странице<jason-custom />
Customized built-in elements
class JasonCustom extends HTMLUListElement {
construtor() {
super()
//
}
}
customElements.define('jason-custom', JasonCustom, { extends: 'ul' })
Чтобы использовать этот пользовательский элемент на странице, используйте<ul is='jason-custom' />
Функция обратного вызова жизненного цикла пользовательского компонента
- connectedCallback: вызывается, когда пользовательский элемент впервые вставляется в DOM документа.
- disabledCallback: вызывается, когда пользовательский элемент удаляется из DOM документа.
- acceptCallback: вызывается, когда пользовательский элемент перемещается в новый документ.
- attributeChangedCallback: вызывается, когда настраиваемый элемент добавляет, удаляет или изменяет свои собственные атрибуты.
Пример использования функции обратного вызова цикла объявления можно увидеть в Интернете.life-cycle-callbacks
Shadow DOM
Важной особенностью веб-компонентов является инкапсуляция, которая скрывает HTML, CSS и поведение от другого кода на странице, так что неиспользуемые функции не смешиваются. Затем нужно ввести Shadow DOM, который может добавлять скрытые независимые элементы к элементу.
Shadow DOM позволяет добавить скрытый DOM в обычное дерево DOM
Shadow DOM имеет несколько концепций- Теневой хост: обычный узел DOM, к которому будет добавлен теневой DOM.
- Теневое дерево: дерево DOM внутри Shadow DOM.
- Граница теней: где заканчивается теневой DOM и где начинается обычный DOM.
- Корень тени: корневой узел дерева теней.
Вы можете манипулировать элементами Shadow DOM так же, как и базовыми элементами DOM, а также можете добавлять в Shadow DOM<style>
И влияет только на элементы в Shadow DOM. Стандарт Shadow DOM означает, что вы можете поддерживать набор Shadow DOM для своих элементов.
Применение
можно использоватьElement.attachShadow()
Чтобы добавить Shadow DOM к любому элементу, attachShadow принимает объект в качестве параметра, а параметр имеет атрибутmode
, с двумя необязательными значениямиopen
close
.
let shadowOpen = Elementp.attachShadow({'mode': open})
let shadowClose = Elementp.attachShadow({'mode': close})
open
Shadow DOM можно получить через javascript, например
let shadowDom = Elementp.shadowRoot
close
Если да, то это означает, что теневой Дом нельзя получить извне.shadowRoot
вернусьnull
Более конкретные статьи см.Open vs. Closed Shadow DOM(Может потребоваться научный доступ в Интернет)
templates
slot
Да, все верно, функция шаблонов теперь предусмотрена нативно! ! Этот тип шаблона не будет отображаться браузером, но может быть вызван с помощью javascript!
официальный пример
<template id="my-paragraph">
<p>My paragraph</p>
</template>
как это использовать
let template = document.getElementById('my-paragraph');
let templateContent = template.content;
document.body.appendChild(templateContent);
Вы можете использовать слот для повышения гибкости шаблона, роль слота заключается в предоставлении заполнителя
Слот использует атрибут name в качестве идентификатора, и вы можете определить произвольные фрагменты html в tempalte в качестве заполнителей, когда объект шаблона используется в html-скрипте. Например:
// tamplate
<p><slot name="my-text">My default text</slot></p>
// 使用时
<my-paragraph>
<span slot="my-text">Let's have some different text!</span>
</my-paragraph>
//生成的html
<p><span>Let's have some different text!</span></p>
Конечно, все приведенные выше коды относятся к эпохе фермерства, поэтому платформа, которая позволяет нам разрабатывать компоненты веб-компонентов с эффективностью Индустрии 2.0, имеет технологию Google.polymer, собственный ionicstencil.
Хотя этот стандарт существует уже давно, на самом деле в нем участвовало не так много разработчиков. Это может быть связано с совместимостью этой вещи.
Видно, что помимо хай версии хрома и сафари она наиболее полно поддерживается. Но насколько это забавная вещь, и как хорошо с ней можно играть в качестве экспериментального продукта!