使用 Custom Elements 实现步骤条组件及遇到的坑点

阅读时长 9 分钟读完

Custom Elements 是一项 Web Component 技术,可以让开发者自定义 HTML 元素并在页面中使用。

在本文中,我们将介绍如何使用 Custom Elements 实现一个步骤条组件,并讨论一些遇到的坑点。

实现步骤

1. 定义组件

我们首先定义一个 step-bar 组件,其中包含若干个 step-item。每个 step-item 表示一个步骤,包含一个标题和一个状态,状态可以是 activedoneundone 之一。

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

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

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

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

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

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

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

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

2. 编写样式

为了美化步骤条组件,我们需要编写一些样式。这里我们采用了 Flex 布局和 CSS 伪元素等技巧。

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

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

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

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

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

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

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

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

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

3. 初始化组件

我们需要在 connectedCallback 方法中初始化组件。对于 step-bar 组件,我们需要遍历所有子元素并添加 step-item 类名,以便它们受到样式控制。

对于 step-item 组件,我们需要根据属性值设置状态和标题。

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

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

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

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

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

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

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

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

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

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

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

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

4. 使用组件

现在我们可以在 HTML 中使用 step-barstep-item 元素了。

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

遇到的坑点

在实现步骤条组件时,我们遇到了一些坑点。下面是一些解决方案及注意事项。

1. HTML 内容被移除

在使用组件时,注意不要通过 JS 动态修改组件内部的 HTML 内容,因为这会使浏览器将原来的 HTML 移除并重新插入新的 HTML,导致组件失效。

2. 动态属性修改不会自动触发 attributeChangedCallback

在组件中,我们可以通过 setAttributeproperty 来修改自定义属性的值。但是需要注意的是,当我们通过 property 修改属性值时,不会自动触发 attributeChangedCallback 方法,我们需要额外调用 setAttribute 来触发。

3. 内部元素绑定事件无法传递到外部

当我们将一个 click 事件绑定到组件的内部元素时,点击该元素时,该事件不会传递到组件本身或其父级元素,导致无法触发组件的相关回调。解决方法是使用事件委托,将事件绑定到组件本身或其父级元素。

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

总结

在本文中,我们使用 Custom Elements 实现了一个步骤条组件,并讨论了一些遇到的坑点。本文的内容可以帮助读者了解 Custom Elements 技术,并指导读者如何开发自定义组件。完整的示例代码可以在我的 GitHub 仓库中找到。

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

纠错
反馈