何为 Web Components
Web Components 是一套不同的技术,允许您创建可重用的定制元素(它们的功能封装在您的代码之外)并且在您的 web 应用中使用它们。
Web Components 由三项主要技术组成,它们可以一起使用来创建封装功能的定制元素,可以在你喜欢的任何地方重用,不必担心代码冲突。
Custom elements(自定义元素):一组 JavaScript API,允许您定义 custom elements 及其行为,然后可以在您的用户界面中按照需要使用它们。
Shadow DOM(影子 DOM):一组 JavaScript API,用于将封装的“影子”DOM 树附加到元素(与主文档 DOM 分开呈现)并控制其关联的功能。通过这种方式,您可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。
HTML templates(HTML 模板):
<template>
和<slot>
元素使您可以编写不在呈现页面中显示的标记模板。然后它们可以作为自定义元素结构的基础被多次重用。
Web Components 的创建方式
使用 class 类进行自定义元素定义:
1 | class CompanyCard extends HTMLElement { |
使用 Element.attachShadow() 方法将一个 shadow DOM 附加到自定义元素上。使用通常的 DOM 方法向 shadow DOM 中添加子元素、事件监听器等等:
1 | this._shadowRoot = this.attachShadow({ mode: "open" }); |
使用 CustomElementRegistry.define() 方法注册您的新自定义元素 ,并向其传递要定义的元素名称、指定元素功能的类、以及可选的其所继承自的元素。
1 | window.customElements.define("company-card", CompanyCard); |
使用 <template>
和 <slot>
定义一个 HTML 模板。再次使用常规 DOM 方法克隆模板并将其附加到您的 shadow DOM 中。
1 |
|
生命周期回调
connectedCallback( ):customElement (company-card 元素) 第一次被插入到 DOM 时被调用,通常用来初始化状态,事件监听,创建影子 DOM。
disconnectedCallback( ):当 customElement (company-card 元素) 从 DOM 移除时执行,通常用来做清理工作,例如取消事件监听和定时器。
attributeChangedCallback(name, oldValue, newValue):当 customElement (company-card 元素) 增加、删除、修改自身属性时被调用。
- 需要注意的是,如果需要在元素属性变化后,触发 attributeChangedCallback() 回调函数,你必须监听这个属性。需要通过定义 get observedAttributes( ) 函数来实现,observedAttributes() 函数体内包含一个 return 语句,返回一个数组,包含了需要监听的属性名称:
1 | static get observedAttributes() { |
adoptedCallback( ):当 customElement (company-card 元素) 通过 document.adoptNode() 方法将这个自定义元素实例移动到新文档时被调用。
基本使用示例
index.html 内容:
1 |
|
index.js 内容:
1 | class CompanyCard extends HTMLElement { |
TODO LIST DEMO
index.html 内容:
1 |
|
todoList 内容:
1 | (function () { |
todoItem 内容:
1 | (function () { |
参考文档
发布时间: 2022-05-27
最后更新: 2022-05-28
本文标题: Web Components
本文链接: https://dnhyxc.gitee.io/2022/05/27/webComponents/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!