Web Components:基于 Custom Elements 实现可复用组件

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

Web Components 是一种新兴的前端技术,它可以帮助开发者实现可复用的自定义组件,这些组件可以方便地在多个项目中使用。本文将介绍 Web Components 中的 Custom Elements,展示如何利用 Custom Elements 实现一个简单的组件。

Custom Elements 是什么?

Custom Elements 是 Web Components 的核心 API 之一,它允许开发者定义自己的 HTML 元素并在 DOM 中自定义其行为。可以不依靠任何框架和库来实现组件的复用,从而有效地提高代码的可维护性和可读性。

一个 Custom Element 由两个部分组成:

  • Element Definition:定义了一个新的 HTML 标签的名称和它的行为。
  • Element Instance:一个使用了自定义元素的实例,即 Web Components。

如何使用 Custom Elements?

定义一个 Custom Element 只需使用两个 API:customElements.define() 和 class extends HTMLElement。

以下是一个定义了一个新的 元素并添加了 click 事件监听器的示例:

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

可以看到,我们使用了类来定义一个新的元素,构造函数 super() 向 HTMLElement 基类的构造函数传递了参数,并提供了 connectedCallback() 方法来监听元素的连接事件。接着在自定义元素定义后使用 customElements.define() API 注册这个新元素。

实现一个简单的组件

让我们以一个简单的例子来演示如何使用 Custom Elements 实现可复用的组件,一个简单的 Rating 组件。

实现这个 Rating 组件需要遵循以下步骤:

  1. 定义 HTML 模板
  2. 声明组件类
  3. 定义 Shadow DOM 根节点和样式
  4. 编写组件行为
--------- ---------------------
  -------
    -------- -
      -------- -------------
      ------- -----
      -------------- ----
    -
    ----- -
      -------- -------------
      ------ -----
      ------- -----
      ------------- ----
      ----------- ----------------------------------------------------------------------------------------
      ---------------- ---- -----
    -
    ----- -
      ---------------------- ------
      ----------------- -------
    -
  --------
  ---- ----------------
    ---- -------------------
    ---- -------------------
    ---- -------------------
    ---- -------------------
    ---- -------------------
  ------
-----------
--------
  ----- ------ ------- ----------- -
    ------------- -
      --------
      ------------------- ----- ------ ---
      ------------------------------------------------------------------------------------------------
      ---------- - ------------------------------------------------------
    -
    ------ --- -------------------- -
      ------ ----------
    -
    ------------------------------ --------- --------- -
      -- ----- --- -------- -
        ------------------------
      -
    -
    --------------- -
      ----- - --------------- -- --
      ------------------------- ------ -- -
        -- ------ - ------ -
          ---------------------------
        - ---- -
          ------------------------------
        -
      ---
    -
  -
  ---------------------------------- --------
---------

可以看到,我们在 HTML 模板中定义了一个星星效果的布局,使用 JavaScript 定义组件类并设置 shadow DOM 根节点将模板添加到组件中。在 setValue() 方法中,我们通过 Array.from() 方法将 shadow DOM 中包含的所有星形元素存储到 this.stars 中,随后根据 value 属性值来修改元素的样式。

接着我们使用 customElements.define() 注册自定义组件 "my-rating",使得浏览器可以渲染它,一旦我们把它加入到页面的文档流中,它就会自动呈现出来。

如何使用组件?

我们现在可以像使用任何其他 HTML 元素一样使用组件,只需要在 HTML 中创建自定义的 元素并为其设置 value 属性值即可。

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

我们还可以以编程方式操控自定义组件,使用以下命令来设置 value 属性的值:

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

总结

在本文中,我们学习了如何使用 Custom Elements 实现一个 Rating 组件。尽管 Custom Elements API 适用于简洁和复杂的组件,但对于比较简单的场景,这种技术可能会感觉有些繁琐。然而,使用 Web Components 会让你的代码变得更加规范化和组织有序,并且可以提升代码的可读性和可维护性。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64b0fb3a48841e9894d40d83


猜你喜欢

  • 详解 ES9 添加的数组扁平化方法 flat 及 flatMap

    JavaScript 是一种广泛使用的编程语言,它允许您在不同的浏览器和操作系统上编写功能丰富的 Web 应用程序。ES9(ECMAScript 2018)是一种 JavaScript 标准,它引入了...

    1 年前
  • 使用 Mocha 测试框架测试 ASP.NET Core 应用程序!

    前言 在开发 ASP.NET Core 应用程序时,进行单元测试是非常重要的部分。Mocha 测试框架是一个流行的 JavaScript 测试框架,它提供了用于编写测试脚本的函数和工具来简化测试的编写...

    1 年前
  • TypeScript 中的命名空间使用详解

    在前端开发中,TypeScript 作为一种静态类型的编程语言,拥有着强大的类型检查功能和需要更少调试的优点。在 TypeScript 中,命名空间是一种重要的概念,它可以帮助我们更好地组织项目,防止...

    1 年前
  • Mongoose 中自带的数据校验方法介绍

    在后端开发过程中,数据的校验是必不可少的。Mongoose 是一个在 Node.js 中操作 MongoDB 的 ODM(对象文档映射)库,它提供了一些自带的数据校验方法,方便我们对数据的正确性进行校...

    1 年前
  • 使用 Chai 和 Mocha 测试 JavaScript 正则表达式

    在前端开发中,正则表达式是一个非常重要的主题。但是,编写正则表达式并不是一件容易的事情,需要耗费时间和精力。为了提高代码的质量和准确性,我们需要使用测试工具来测试正则表达式。

    1 年前
  • Node.js 中如何使用 GraphQL 实现 API

    在 Web 开发中,API 是不可或缺的一部分。在过去,RESTful API 是最流行的 API 架构,但如今 GraphQL 等新兴的 API 架构也受到了越来越多的关注。

    1 年前
  • SSE技术在实现大量在线观看时的优化建议

    随着互联网的普及,越来越多的人选择在网上观看视频,使传统的流媒体技术逐渐无法满足人们的需求。在这种情况下,SSE技术逐渐成为了一种首选的在线观看方案。SSE技术(Server-Sent Events)...

    1 年前
  • 如何快速入门 MongoDB 数据库

    前端工程师在日常的工作中,经常会涉及数据库操作。MongoDB 是一种非关系型数据库,与传统的MySQL等关系型数据库不同,MongoDB的操作场景更适合Web应用程序,由于其灵活性、高性能、易扩展性...

    1 年前
  • 如何使用Vue.js优化SPA开发中的表单操作?

    随着单页面应用程序(SPA)变得越来越流行,我们需要更好地处理表单操作。在这篇文章中,我们将介绍如何使用Vue.js来优化SPA开发中的表单操作。 Vue.js简介 Vue.js是一个渐进式JavaS...

    1 年前
  • 针对 Next.js 的单元测试:Jest

    作为现代 Web 开发中重要的一环,单元测试是保障代码质量、减少 Bug 发生率的必要手段。而在使用 React 开发 Web 应用的过程中,使用 Next.js 提供的支持更加丰富的生态系统,结合 ...

    1 年前
  • 基于 React 的 PWA 应用开发中遇到的问题及解决方法

    近年来,随着移动互联网的快速发展,PWA(Progressive Web Apps)正逐渐成为新一代移动应用的趋势。而对于前端开发人员而言,使用 React 开发 PWA 应用,既可以享受 React...

    1 年前
  • Material Design 中滑动抽屉菜单的实现方法

    随着 Material Design 的逐渐普及,滑动抽屉菜单成为了移动端界面设计中必不可少的一部分。那么在前端领域如何实现 Material Design 中的滑动抽屉菜单呢?本文将详细讲解实现方法...

    1 年前
  • ES7 中的 Symbol.iterator 实现对象的迭代器操作

    ES7 中引入了一种新的数据类型:Symbol,它是一种唯一且不可变的数据类型,可以用作对象属性的键。其中,Symbol.iterator 是一个内置 Symbol 值,用于定义迭代器对象的表现形式。

    1 年前
  • RxJS 中操作符 map、pluck 与 mapTo 的区别及使用场景

    在 RxJS 中,map、pluck 与 mapTo 三个操作符都是非常常用的操作符。它们都能对 Observable 中发出的每个值进行处理,返回一个新的值。但是它们之间存在一些区别,下面我们来详细...

    1 年前
  • Sequelize 精选 100 个常见问题解答

    Sequelize 是一个面向 Node.js 的 ORM(Object-Relational Mapping) 库,用于操作数据库。它支持多种数据库,例如 MySQL、PostgreSQL、SQLi...

    1 年前
  • Babel-plugin-transform-runtime 在微信小程序中的使用

    前言 微信小程序是目前非常流行的一种轻量级的开发方式,能够快速创建小程序并在微信平台上进行发布。在小程序的开发过程中,前端工程师需要使用各种技术来完成开发任务,其中 Babel 是一款非常重要的技术。

    1 年前
  • Docker Swarm 实战教程:构建高可用 Tomcat 集群

    一、为什么需要 Docker Swarm? 在软件开发和运维过程中,高可用性是至关重要的。然而,构建高可用性应用程序往往需要复杂的架构和配置,同时操作成本也很高。Docker Swarm 是 Dock...

    1 年前
  • Unicode 正则表达式的扩展技巧

    随着全球化的发展,越来越多的网站和应用需要支持多种语言和字符集,这就要求我们在前端开发中需要更加精确的使用正则表达式处理文本。在 Unicode 时代,使用传统的 ASCII 码方式的正则表达式处理多...

    1 年前
  • 使用 Next.js 时出现样式问题怎么办?

    在使用 Next.js 构建前端应用的过程中,我们经常会遇到样式问题。比如样式不生效、样式生效不完全等问题。这些问题的出现往往与 Next.js 的一些特性有关,比如服务器端渲染、动态导入等。

    1 年前
  • 如何使用 Express.js 和 OpenAPI 实现 RESTful API 文档自动生成

    前言 RESTful API 是一种很常见的 API 规范,也是 Web 应用的基石。 RESTful API 需要满足一些条件,如遵循 HTTP 方法(GET、POST、PUT、DELETE 等),...

    1 年前

相关推荐

    暂无文章