Web Components 实战 | 如何使用自定义元素创建组件?

Web Components 是一种新型的 Web 技术,旨在为用户创建自定义、可重用的 UI 组件提供标准化、原生的支持。Web Components 可以帮助开发人员轻松地将组件与其它 Web 应用程序集成。该文将介绍如何使用自定义元素创建 Web Components。

介绍

Web Components 由四个主要技术组成:

  1. **自定义元素 (Custom Elements)**:可以定义自己的 HTML 元素,开发人员可以将其作为组件使用;
  2. **影子 DOM (Shadow DOM)**:让 Web 开发人员可以将标记分组并从主文档分离出来,以便控制组件样式和事件;
  3. **模板元素 (HTML Templates)**:是一种新的 HTML 元素类型,可以用隐式的机制来保持客户端代码的可读性,使它们更容易读取和维护;
  4. **HTML 导入 (HTML Imports)**:将 HTML 文件分成多个小文件,使其更易于管理和共享,便于在其它页面和项目中重用。

Web Components 技术可支持编写“独立”组件,即这些 Web Components 组件可以在需要时使用,不会对应用程序其他部分造成任何影响。

自定义元素(custom elements)概述

使用 Web Components 创建自定义元素的最重要的构造方法是window.customElements.define()。此方法用于在文档中注册新的 Web 组件。

我们需要为自定义元素指定两个参数:

  1. 自定义元素的标记名称。这应该与组件的名称匹配,但必须使用该名称的短划线连接形式;
  2. Web Components 类的名称。
--------- -----
----- ----------
------
    ----- ----------------
    ---------- ---------- -- - ----------------------
-------
------
    ---------------------------------------
    --------
        ----- --------------- ------- ----------- - -- --- ---------- -
            ------------- -
                --------
                ----- - - ----------------------------
                ------------- - ------ --- -------------
                ------------------- ----- ------ ------------------
            -
        -

        ------------------------------------------------- ----------------- -- -- --- ----------
    ---------
-------
-------

在此示例代码中,我们创建了一个自定义元素,使用window.customElements.define()方法将其注册到 Web Components。在此例中我们只是简单地在该元素中创建了一个新的段落元素,在页面上插入了一个简单的文本"Hello Web Components!"。

最后,我们将前面定义的 Web Components 注册为自定义元素my-custom-element,因此,我们现在可以在 HTML 页面上使用自定义元素作为组件。在包含该代码的页面中,现在可以通过添加<my-custom-element>元素来添加该组件。

Shadow DOM 概述

影子 DOM 是 Web Components 技术的一个重要特性,它可以确保组件独立于其他页面元素。您可以使用 Shadow DOM 将 Web 组件分离并隐藏一些细节,同时仍然可以与 Web 应用程序的其余部分进行交互。

请注意,Shadow DOM 中的元素是隔离开的,你无法用标准的方法去修饰或覆盖其样式或内容。这意味着如果你想要重写组件中的样式或内容的话,你需要写名为“slot”的特殊标签,使其可在组件本身或 Shadow DOM 的外部进行覆盖。

开始构建 Web Components

定义一个自定义元素

在示例代码中,我们定义了一个MyCustomElement类,该类扩展自HTMLElement。这是 Web Components 构建块中的核心,它使开发人员能够创建自己的 HTML 元素并以此来构建组件。

----- --------------- ------- ----------- -
    ------------- -
        --------
    -
-

注册自定义元素

要使用自定义元素定义组件,我们需要将 Web Components 类注册为自定义元素。使用window.customElements.define()方法来定义新的自定义元素及其相关功能。

------------------------------------------------- -----------------

创建影子 DOM

创建影子 DOM 的方法有多种。在示例代码中,我们使用了attachShadow()方法来创建影子 DOM。在此方法中,您可以选择将 shadow DOM 设置为“open”或“closed”,以控制其可访问性。

----- --------------- ------- ----------- -
    ------------- -
        --------
        ----- ---------- - ------------------- ----- ------ ---
    -
-

构建组件

在我们构建组件之前,让我们给影子 DOM 中添加一些样式和 HTML。我们可以将 Web Components 方法添加到 MyCustomElement 类的构造函数中。在此示例中,我们使用 JavaScript 来设置样式和添加 HTML 元素,在独立的 Shadow DOM 中创建了一个 Web 组件。

----- --------------- ------- ----------- -
    ------------- -
        --------
        ----- ---------- - ------------------- ----- ------ ---
        ----- --------------- - -----------------------------------
        ------------------------- - -
            -------
                - -
                    ------ ----
                -
            --------
            -------- --- ---------------
        --

        ----------------------------------------------------------------
    -
-

在上面的代码段中,我们首先创建了一个 <template> 元素,该元素包含一些样式和 HTML 元素。然后,我们将该元素追加到了 Shadow DOM 中。这就是整个组件的构建过程。

###使用组件

最后,我们现在可以从其他 Web 页面使用我们自定义的组件了。只需添加自定义元素所使用的标记名称的自定义元素即可。

---------------------------------------

注意:对于 Web Components 的自定义元素名称,必须用短划线分隔的自定义标签(如<my-custom-element>)代替大写字母和/或下划线。否则将无法工作。

结论

Web Components 技术让前端开发人员变得更加有创意,并且能够通过创建自定义组件并将其添加到其它应用程序中来极大地影响其功能和外观。Web Components 组件具有许多优点,这使得它们成为构建可重复使用、高度可配置的方法。

本文介绍了如何使用自定义元素创建 Web Components 组件。使用 Web Components 技术,你可以更加轻松地构建跨平台、高度可重用、可重组 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6710d15cad1e889fe2fc3331