Web Components: 简介与使用指南

阅读时长 8 分钟读完

Web Components 是一种新型的 Web 开发技术,它是由 W3C 标准化的。它是由以下 4 个技术规范组成:

  • Custom Elements:允许开发者创建自定义 HTML 元素;
  • Shadow DOM:提供了一个在浏览器中封装元素的方式,让一个组件的样式和行为不受外界影响;
  • HTML Templates:是一个新的 HTML 标签,用于定义客制化的模板;
  • ES Modules:允许 JavaScript 模块化。

Web Components 的目的是让开发者能够创建可重用的自定义组件,并使这些组件可以在不同的页面和不同项目中使用,从而为网页和应用程序提供更好的可维护性和可拓展性。

Custom Elements

Custom Element 允许开发者创建自定义的 HTML 标签,可以让开发者将组件分装为一个独立的自定义 HTML 元素。在创建 Custom Element 的时候,我们注册一个新的标签名,然后使用一个类继承 HTMLElement 类,以实现自定义元素的行为。

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

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

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

上面的代码中,我们定义了一个自定义元素 ItemList,它继承了 HTMLElement 类,并实现了一个 connectedCallback 方法,在元素被添加到页面上时会调用该回调函数,它向元素添加了一些列表项的 HTML 内容。

我们通过 customElements.define 方法来注册这个自定义元素到浏览器中,第一个参数是元素名称,第二个参数就是我们定义的元素类。

现在可以在 HTML 中使用 <item-list></item-list> 这个标签了,它将会呈现出我们上面定义的列表项。这样,我们就实现了一个简单的自定义组件。

Shadow DOM

Shadow DOM 可以让开发者将组件的样式和行为封装到组件内部,从而使组件的样式和行为与外部不受干扰。Shadow DOM 内部有一棵独立的 DOM 树,与外部的 DOM 结构分开管理。

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

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

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

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

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

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

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

上面的代码中,我们使用 this.attachShadow 方法创建了一个 Shadow DOM 根节点,它的 mode 属性为 open,表示我们可以访问到这个 Shadow DOM。我们创建了一个列表元素和一个样式元素,然后将它们都添加到了 Shadow DOM 中。

在 HTML 中使用 <item-list></item-list> 这个标签时,它将自动呈现出我们定义的样式和内容,同时也是与外部隔离的。

HTML Templates

HTML Templates 是一个新的 HTML 标签,它允许我们定义一些自定义的模板。这些模板可以在组件中被多次使用,并可以动态地插入数据。一个 HTML 模板是一个包含了 HTML 元素,并且在页面上不可见的 HTML 片段。

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

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

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

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

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

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

上面的代码中,我们定义了一个模板元素,它的 ID 是 item-list-template。我们在 Shadow DOM 中获取模板的内容,并使用 cloneNode 方法克隆了一个副本,然后向列表中动态添加了三个列表项的内容,并将它们添加到 Shadow DOM 中。

在 HTML 中,我们可以定义一个 <template> 元素,它的 id 属性为 item-list-template,然后将列表项的数据留空,如下所示:

上面的代码中,我们使用了 <template> 元素来定义一个模板,它的 ID 是 item-list-template。然后使用自定义元素 <item-list> 来呈现我们定义的模板,模板的内容将会被动态地插入到组件的 Shadow DOM 中。

ES Modules

ES Modules 是一种新的 JavaScript 模块化的方式。它使用 importexport 关键字来导入和导出模块。每个 ES 模块都是一个独立的文件,文件内容被视为一个模块,它可以在任何地方进行导入。

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

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

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

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

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

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

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

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

上面的代码中,我们将组件的代码放在了一个独立的文件中,并通过 export 关键字导出该组件。在 index.html 中,我们使用 import 关键字将 ItemList 组件导入,并通过自定义元素 <item-list> 呈现该组件。这样我们就实现了 ES 模块化的组件开发。

结语

Web Components 是一种强大的 Web 开发技术,它可以帮助我们更好地创建自定义组件,并实现组件在不同场景中的复用。上面的内容是一个简要的介绍和使用指南,关于 Web Components 的更多内容还有很多可以探索和学习。希望本文对大家对 Web Components 的了解和使用有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/678235ba935627c900fc9f9b

纠错
反馈