五分钟带你简单上手Web Components

  Web Components允许用户自定义一个html元素 来实现组件化、复用,

  利用该技术我们封装实现特定功能特定样式的定制元素用在我们想使用的任何地方

  目前主流框架几乎都支持该技术

  1.vue 通过Vue CLI3和新的@vue/web-component-wrapper库创建web components十分方便

  2.react 可以自由选择在 Web Components 中使用 React,或者在 React 中使用 Web Components,或者两者共存。

  1 通过customElements.define()方法用来注册一个 custom element,该方法接受以下参数:

  • 表示所创建的元素名称的符合 DOMString 标准的字符串。注意,custom element 的名称不能是单个单词,且其中必须有段划线。
  • 用于定义元素行为的类(自定义类) 。
  • 可选参数,一个包含 extends 属性的配置对象,是可选参数。它指定了所创建的元素继承自哪个内置元素,可以继承任何内置元素。
  • 例如 window.customElements.define(‘web-com‘,webCom)
  • 如果我们想让web-com继承div元素的特性 可以这么定义window.customElements.define(‘web-com‘,webCom,{extends:p}

2 自定义元素

2.1 一个 custom element 的类对象可以通过 ES 2015 标准里的类语法生成。所以,webCom可为

class webCom extends HTMLElement{

constructor(props) {

必须首先调用 super 方法

super(props);

以下写元素的功能代码

}

}

  上述代码片段中,类的构造函数constructor总是先调用super()来建立正确的原型链继承关系。在构造函数中,我们会定义元素实例所拥有的全部功能。作为示例,我们首先         会将shadow root附加到custom element上,然后通过一系列DOM操作创建custom element的内部阴影DOM结构,再将其附加到 shadow root上,最后再将一些CSS附加到             shadow root的style节点上

3 template 标签

通过template 标签给自定义元素定义结构样式   并且给模板指定id

<template id="webComTemplate">

template标签内部创建style标签 内部的样式组件内部生效 也可以外部定义

<style>

样式省略

</style>

定义dom结构

<div class="container">

<div class="up">

</div>

<div class="down"></div>

<img class="img">

</div>

</template>

4 为自定义元素添加内容

class webCom extends HTMLElement{

constructor(props) {

super(props);

指定模式 外部是否能够访问内部dom mode两种取值 closed禁止访问 open允许访问

var shadow=this.attachShadow({mode:‘closed‘})

获取template的模板

var tem=document.getElementById(‘webComTemplate‘)

声明一个变量 保存模板的内容

var content=tem.content.cloneNode(true)

给相应的元素设置属性 让元素的文本内容显示属性值

content.querySelector(‘.container>.up‘).innerText = this.getAttribute(‘title‘);

给相应的元素设置属性 让元素的文本内容显示属性值

content.querySelector(‘.container>.down‘).innerText = this.getAttribute(‘content‘);

给相应的元素设置属性 让img的的src属性等于设置的属性值

content.querySelector(‘img‘).setAttribute(‘src‘, this.getAttribute(‘img‘));

把模板的内容放入shadow

shadow.appendChild(content);

通过shadow Api获取元素

this.img = shadow.querySelector(‘img‘);

给元素监听相应事件

this.img.addEventListener(‘click‘,()=>{

});

}

}

调用window.customElements.define(‘web-com‘,webCom)方法 生成自定义元素web-com

5页面中使用web-com标签及显示效果

5.1页面中使用    <web-com    title="跟着大胖学前端"    content="算了还是跟着大胖吃美食吧"    img="./food.jpg"  ></web-com>

5.2 页面展示效果

6 用户交互

如果需要交互 在类的内部 通过shadow api获取元素  监听事件

this.img = shadow.querySelector(‘img‘);

this.img.addEventListener(‘click‘,()=>{

});

7生命周期回调函数在自定义的element的构造函数中,可以指定多个不同的回调函数,它们将会在元素的不同生命时期被调用:

  • connectedCallback:当 custom element首次被插入文档DOM时,被调用。
  • disconnectedCallback:当 custom element从文档DOM中删除时,被调用。
  • adoptedCallback:当 custom element被移动到新的文档时,被调用。
  • attributeChangedCallback: 当 custom element增加、删除、修改自身属性时,被调用。

原文地址:https://www.cnblogs.com/ldf-zp/p/12165435.html

时间: 2024-11-15 18:23:11

五分钟带你简单上手Web Components的相关文章

五分钟带你了解年薪50W的Web前端开发工程师需要掌握什么?

进入一个 新行业肯定是看好这个行业的发展前景,那么web前端开发的前景到底怎样呢? 据悉,目前web前端工程师的年薪待遇平均在10万以上,高级HTML前端工程师年薪达30-50万,很多企业对于与web前端相关的技术职位更是求贤若渴. 以目前的互联网企业为例,他们都十分注重前端的设计.因为,只有先做好前端技术.做好客户体验一切才有可能.用户体验做好,才有人访问,访问的人多了,才会优化后端,才做客户分析,公司上市了,才从大量数据做数据分析,获得更有价值的数据信息.所以,一些互联网创业公司也是如此,在

1分钟带你理解Java Web开发必掌握的:Token ,Cookie,Session

在Web应用中,HTTP请求是无状态的.即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session. Cookie Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式.Cookie存储的数据量有限,且都是保存在客户端浏览器中.不同的浏览器有不同的存储大小,但一般不超过4KB.因此使用Cookie实际上只能存储一小段的文本信息. 例如:登录网站,今输入用户名密码登录了,第二天再

五分钟带你学会 JavaScript 闭包

闭包,是javascript中独有的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述,直接上干货,让你分分钟学会闭包! 1 闭包–爱的初体验 在接触一个新技术的时候,我首先会做的一件事就是:找它的demo code.对于码农们来说,代码有时候比自然语言更能理解一个事物. 其实,闭包无处不在,比如:jQuery.zepto的主要代码都包含在一个大的闭包中,所以下面我先写一个最简单最原始的

实验五(简单嵌入式WEB服务器实验)问题总结

实验五问题总结 问题链接:<信息安全系统设计基础>实验五实验报告 虽然将07_httpd文件中全部拷贝进了bc中,文件夹中拥有Makefile文件,但是还是无法通过make得到该文件夹中copy和httpd的可执行文件.解决:第一次是觉得Makefile文件中的PATH路径不对,将其改成了/home/bc/07_httpd存盘退出后发现还是无法执行,第二次我们直接使用gcc对其单步进行编译:armv4l-unknow-linux-gcc –E copy.c –o copy.iarmv4l-un

[分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)

踏雁寻花 发表于 2015-8-23 23:31:28 https://www.itsk.com/thread-355923-1-4.html 学会封装,只需要掌握十个步骤.五分钟包你学会,不会不交学费~ 适合人群: 1.会装系统 2.了解PE的使用 3.对注册表有初步的了解 所需工具: 1.Windows系统镜像 2.PE(可以放到U盘,如果使用虚拟机封装系统,直接下载PE镜像即可) 3.磁盘清理工具(如Windows7瘦身工具.自由天空系统清理&减肥程序.注册表减肥工具等) 4.驱动包(如万

Lightning Web Components 组合(五)

使用组合我们可以用来设计复杂的组件. 组合一些比较小的组件,可以增加组件的重新性以及可维护性. 通过以下一个简单的demo,将会展示关于owner 以及container 的概念,在实际的项目中 example-todo-item 一般是通过for:each 循环动态填充的 <!-- todoApp.html --> <template> <example-todo-wrapper> <example-todo-item item-name="Milk&

好程序员带你五分钟了解一致性hash算法

好程序员带你五分钟了解一致性hash算法,一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时,映射关系可能会出现问题,采用一致性hash算法,就能较好的解决该问题. Hash值取模算法存在的问题 比如,我们有海量的图片存储在服务器上,假如,现在有4台服务器,我们可以根据图片名称,采用hash算法,决定图片存储在哪台服务器 如果现在需要增加服务器,那么存取图片的服务器的算法就会发生改变

信息安全系统设计基础实验五:简单嵌入式 WEB 服务器实验 (20135229,20135234)

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计                         班级:1352 姓名:马启扬 吕松鸿     学号:20135234 20135229 成绩:             指导教师:娄嘉鹏      实验日期:2015.11  实验密级:       预习程度:               实验时间:15:30—17:00  仪器组次:       必修/选修:必修        实验序号:05    实验

Java Socket编程(五) 简单的WEB服务器

简单的WEB服务器 一个简单的WEB服务器将由列表9.2这样构建.当然,还必须要对方法和回应事件进行改进.简单的服务器不会分析和存储请求头.新的WEB服务器将分析和存储请求,为以后的处理作准备.为了达到这个目的,你必须有一个包含HTTP请求的类. HTTPrequest类 列表9.5列出了一个完整的HTTPrequest类.这个类必须包括一个请求头所需的所有信息. 列表9.5.HTTPrequest类. import java.io.*; import java.util.*; import j