使用 Web Components 和 Custom Elements 构建可检索的 Web 应用程序

阅读时长 9 分钟读完

Web 组件和自定义元素是现代 Web 技术中最流行的概念之一,它们可以帮助构建可重用的组件和模块化应用程序。本文将介绍如何使用 Web Components 和 Custom Elements 构建可检索的 Web 应用程序,包括如何创建自定义元素、如何为自定义元素添加属性和事件、如何使用 Shadow DOM 将样式和 HTML 封装在组件内部,并且提供了一个示例代码。

什么是 Web Components?

Web Components 是一个包含多个技术的集合,它们允许我们创建可重用的组件和封装 Web 应用程序的视图和行为。Web Components 包含以下技术:

  • Custom Elements:允许我们创建自定义 HTML 元素。
  • Shadow DOM:允许我们将样式和 HTML 封装在组件内部,使其不受外部 CSS 样式的影响。
  • HTML Templates:允许我们定义带有占位符的 HTML 片段,可以在 JavaScript 中进行替换并插入到 DOM 中。

创建自定义元素

要创建自定义元素,我们可以使用 window.customElements.define() 方法来定义一个新的 HTML 元素。在定义元素时,我们需要传递两个参数:元素名称和元素类,元素类必须是 HTMLElement 的子类。

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

-- ----------
------------------------------------------ -----------
展开代码

上面的代码定义了一个名为 my-element 的自定义元素,并为该元素设置了一个初始内容。

添加属性和事件

在自定义元素中,我们可以为元素添加属性和事件。要添加属性,我们可以在元素类中定义 static get observedAttributes() 方法,并返回一个字符串数组,该数组包含要观察的属性名称。当指定的属性值发生更改时,attributeChangedCallback 方法将被调用。

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

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

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

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

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

------------------------------------------ -----------
展开代码

在上面的代码中,我们为自定义元素添加了一个名为 name 的属性,并在元素的构造器、连接回调和属性更改回调中使用了这个属性。

要添加事件,我们可以在元素类中定义自定义事件并使用 CustomEvent 来触发该事件。

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

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

------------------------------------------ -----------
展开代码

在上面的代码中,我们定义了一个名为 my-event 的自定义事件,并在 onClick 方法中使用 dispatchEvent() 来触发该事件。

使用 Shadow DOM

使用 Shadow DOM 可以将样式和 HTML 封装在组件内部,以使其不受外部 CSS 样式的影响。要使用 Shadow DOM,我们需要在自定义元素类中使用 attachShadow() 方法创建一个 Shadow DOM,并将组件的 HTML 和样式添加到 Shadow DOM 中。

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

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

------------------------------------------ -----------
展开代码

在上面的代码中,我们创建了一个 Shadow DOM 并添加了一个包含样式和 HTML 的 button 元素。

示例代码

下面是一个使用 Web Components 和 Custom Elements 构建可检索的 Web 应用程序的示例代码。

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

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

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

    ----------------------------------------------- ----------------
  ---------
-------
-------
展开代码

上面的代码定义了一个名为 searchable-list 的自定义元素,它包含一个带有输入框和列表的组件。在输入框中输入文本时,列表将根据匹配项过滤。

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

纠错
反馈

纠错反馈