Custom Elements(五)——Custom Elements 里的细节问题

面试官:小伙子,你的数组去重方式惊艳到我了

Custom Elements(五)——Custom Elements 里的细节问题

在上一篇文章中,我们学习了如何使用 Custom Elements 创建自定义的 HTML 元素。在本文中,我们将讨论 Custom Elements 的一些细节问题。

组件的写法

Custom Elements 是由 JavaScript 和 HTML 元素组成的。下面是一个简单的 Custom Element 的例子:

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

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

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

在上面的例子中,我们首先创建了一个自定义的 HTML 元素 <my-element>。在 <script> 标签中,我们定义了一个名称为 MyElement 的 JavaScript 类,该类继承自 HTMLElement。在类的构造函数中,我们调用了 super(),这是用于调用继承的父类构造函数的语句。

最后,我们将自定义元素配置为 my-element,使用 customElements.define() 方法进行注册。这个方法接受两个参数:自定义元素的名称和它的类。

自定义元素的生命周期

Custom Elements 有一个生命周期。当一个自定义元素被创建时,它会经历以下阶段:

  1. **constructor()**:自定义元素被创建后,第一个被调用的是 constructor() 方法。
  2. **connectedCallback()**:在元素被添加到文档流中时调用此方法。如果元素被添加到一个节点中,而这个节点已经在文档流中,则此方法将被调用。注意,如果在元素还没有被放到文档流中就进行了修改,此方法不会被调用。如果需要重新连接到文档流,该元素将被删除并再次添加到文档流中,以触发此方法。
  3. **disconnectedCallback()**:与 connectedCallback() 相反,当元素从文档流中移除时,将调用此方法。
  4. **attributeChangedCallback()**:当元素的属性发生变化时,将调用此方法。你可以使用 observedAttributes() 方法通过传入一个数组来指定暴露给监听器的属性列表。在此方法内部,oldValuenewValue 参数将分别包含先前和当前的值。

以下是一个例子,展示了以上生命周期的用法:

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

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

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

运行上面的代码,你会看到如下输出:

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

子元素的创建

当父元素被创建时,子元素还没有被创建。因此,将子元素添加到父元素可能会导致问题。下面是一个例子:

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

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

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

在上面的例子中,我们在 constructor() 中添加了一个 innerHTML,并使用 appendChild() 添加了一些文本。然而,由于元素还没有被连接到文档流中,子元素也还没有被创建。因此,添加子元素的操作将失败。

添加子元素的正确方式

下面是一种添加自定义子元素的正确方式:

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

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

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

在这个例子中,我们使用 attachShadow() 方法来创建一个 Shadow DOM,该对象将在 Custom Element 内部创建。然后,我们创建了一个 span 元素,并添加了文本。最后,我们将 span 元素添加到 Shadow DOM 中,以成功创建自定义元素。

总结

Custom Elements 是现代 Web 开发的一个强大特性。在使用它们时,需要注意它们的生命周期,并使用正确的方式来添加子元素。本文深入探讨了 Custom Elements 里的一些细节问题,包括组件的写法,自定义元素的生命周期以及添加子元素的正确方式。希望对你有所帮助。

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


猜你喜欢

  • ES8 之 async 中的 try catch

    在异步编程中经常会涉及到异常处理,try catch 是一种常用的捕获异常的方式,然而在异步操作中,try catch 会变得更加复杂和微妙。ES8 中的 async 函数在处理异常时提供了更加简便和...

    1 年前
  • PWA 应用中如何实现用户管理?

    什么是 PWA? PWA 是指“渐进式 Web 应用”,是一种能够在离线环境下运行、可以安装到手机或电脑桌面上的 Web 应用。 PWA 的优点: 可以像本地应用一样运行 支持离线访问 可以像原生应...

    1 年前
  • Fastify 中如何使用 JWT 进行用户认证和授权

    Fastify 是一个快速、低开销且可扩展的 Web 框架,它的目标是通过高效的路由和输入验证来提高 API 性能。为了构建安全性更高的 Web 应用程序,我们需要使用用户认证和授权机制来确保只有授权...

    1 年前
  • Cypress 测试之如何模拟下载文件

    前端测试是保障产品质量的重要手段之一,而对于一些需要下载文件的应用场景,如何进行测试就变得非常重要。在 Cypress 中,我们可以使用如下步骤来模拟和验证一个下载功能: 步骤 1:设置 Cypres...

    1 年前
  • Mongoose 查询时不区分大小写的方法

    在开发 Web 应用程序的过程中,数据库查询是非常常见的操作。Mongoose 是一个流行的 Node.js 库,它提供了一些 API 简化和优化 MongoDB 数据库的操作。

    1 年前
  • 如何在 ECMAScript 2016 中使用箭头函数来简化代码

    在 ECMAScript 2016 中,引入了箭头函数的概念。相较于传统的函数定义方式,箭头函数可以使代码更加简洁,同时也有助于避免一些常见的错误。在本文中,我们将探讨如何在 ECMAScript 2...

    1 年前
  • ECMAScript 2021 (ES12) 中的 globalThis 对象详解

    在 ECMAScript 2021 中,新增了一个全局对象 globalThis。这个对象可以在任何环境中获取到全局对象,不论是在浏览器环境下还是在 Node.js 环境下。

    1 年前
  • GraphQL 中如何先执行 query?

    GraphQL 中如何先执行 query? GraphQL 是一种用于构建 API 的查询语言,它旨在提供比传统 REST API 更加强大和灵活的数据请求方式。GraphQL 通过定义一组类型来描述...

    1 年前
  • CSS Flexbox:如何解决在 Safari 中的垂直居中问题?

    在前端开发过程中,经常会遇到需要对元素进行居中对齐的情况。使用 Flexbox 技术就可以解决这些问题。然而,这种技术在 Safari 中有一些不兼容的问题,其中最明显的问题是垂直居中。

    1 年前
  • ES9 对 Array.prototype.sort() 的改进

    在 ES9 中,对 Array.prototype.sort() 进行了改进,在排序时有了更多的控制和灵活性,让我们来了解一下。 什么是 Array.prototype.sort()? Array.p...

    1 年前
  • 利用 Web 组件和 Polymer 构建现代 Web 应用程序

    Web 组件和 Polymer 是现代前端开发中的重要工具,它们提供了一种声明性和可复用的方式来构建 Web 应用程序。在本文中,我们将探讨如何利用这些工具构建现代 Web 应用程序,并提供深度学习和...

    1 年前
  • Koa 项目中如何使用 Koa-compress 插件压缩响应数据

    在前端开发中,网络传输是一个必不可少的环节。为了提高网页访问速度,我们需要尽可能地减小数据传输的大小。而压缩是一个实现这一目标的有效方式之一。Koa 是一款优秀的 Node.js Web 框架,它提供...

    1 年前
  • 带你快速了解 PC 端网页无障碍标准要求

    前言 在互联网时代,网页无障碍已经越来越受到大众的重视。然而,许多人对这一概念还不是很了解。本文将详细介绍 PC 端网页无障碍标准要求,并为读者提供了示例代码,以便学习和实践。

    1 年前
  • 解决 SPA 应用中空白页面闪动的问题

    问题描述 随着前端技术的不断发展,越来越多的应用采用单页面应用(SPA)架构,通过前端路由来实现页面间的无刷新跳转。然而,由于这种跳转方式是异步加载页面内容的,用户在页面跳转过程中会看到空白页面的闪动...

    1 年前
  • Babel 编译 ES6 箭头函数时提示 “Unexpected token =>” 解决方法

    在编写 ES6 箭头函数时,很多人会遇到 Babel 编译报错的情况,提示 “Unexpected token =&gt;”。这是因为在旧版的 Babel 中不支持箭头函数语法,需要升级 Babel ...

    1 年前
  • PM2 如何支持多个 Node.js 应用

    在开发和上线 Node.js 应用时,我们通常会使用 PM2 进行进程管理。PM2 不仅可以让我们方便地启动、停止、重启、查看日志等,还可以支持多个 Node.js 应用的管理。

    1 年前
  • ESLint 配置:如何让 ESLint 支持 lint-staged?

    在现代的前端项目中,我们通常会使用各种工具辅助我们开发和维护代码。其中,ESLint 是一个代码质量检查工具,能够帮助我们发现代码中的一些常见问题和潜在的 Bug,从而提高代码的可读性、可维护性和可靠...

    1 年前
  • 优化 Kubernetes 部署 —— 利用 Kubeflow 实现机器学习任务升级

    在 Kubernetes 中部署机器学习任务是一个相对复杂的过程,尤其是当要进行多个任务的协作时。为了解决这一问题,Kubeflow 在 Kubernetes 上构建了一个完整的机器学习栈,其中包括了...

    1 年前
  • MongoDB 慢查询日志和 Profile 详解

    随着互联网技术的发展,数据量的迅速增长,数据库成为了一种非常重要的应用,然而,在大数据应用下,如何有效的优化数据库的性能,为应用提供更好的服务体验也成为了开发者需要面对的难题,本文将对 MongoDB...

    1 年前
  • 无服务器架构:across the cloud 的探索之旅

    在当今云计算时代,无服务器架构的概念越来越受到人们的关注。它将架构和部署转移到云端,并将应用程序的管理和运维交由云提供商来操作,从而减少了开发人员对基础架构的依赖和管理,提高了可伸缩性和高可用性。

    1 年前

相关推荐

    暂无文章