什么是 Web Components

Web Components 提供了基于原生支持的、对视图层的封装能力,可以让单个组件相关的 javaScript、css、html模板运行在以html标签为界限的局部环境中,不会影响到全局,组件间也不会相互影响  再简单来说:就是提供了我们自定义标签的能力,并且提供了标签内完整的生命周期 

Custom elements(自定义元素):JavaScript API,允许定义custom elements及其行为,然后可以在我们的用户界面中按照需要使用它们。

Shadow DOM(影子DOM):JavaScript API,用于将封装的“影子”DOM树附加到元素(与主文档DOM分开呈现)并控制其关联的功能。通过这种方式,开发者可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。

HTML templates(HTML模板):和元素使开发者可以编写与HTML结构类似的组件和样式。然后它们可以作为自定义元素结构的基础被多次重用。

京东的跨端框架 Taro 的组件部分,就是用基于 Web Components 开发的

1.实战案例

class Btn extends HTMLElement {constructor () {//调用super 来建立正确的原型链继承关系super()const p = this.h('p')p.innerText = '小满'p.setAttribute('style','height:200px;width:200px;border:1px solid #ccc;background:yellow')//表示 shadow DOM 子树的根节点。const shaDow = this.attachShadow({mode:"open"})shaDow.appendChild(this.p)}h (el) {return  document.createElement(el)}/*** 生命周期*///当自定义元素第一次被连接到文档 DOM 时被调用。connectedCallback () {console.log('我已经插入了!!!嗷呜')}//当自定义元素与文档 DOM 断开连接时被调用。disconnectedCallback () {console.log('我已经断开了!!!嗷呜')}//当自定义元素被移动到新文档时被调用adoptedCallback () {console.log('我被移动了!!!嗷呜')}//当自定义元素的一个属性被增加、移除或更改时被调用attributeChangedCallback () {console.log('我被改变了!!!嗷呜')}}window.customElements.define('xiao-man',Btn)

2.template 模式

class Btn extends HTMLElement {constructor() {//调用super 来建立正确的原型链继承关系super()const template = this.h('template')template.innerHTML = `<div>小满</div><style>div{height:200px;width:200px;background:blue;}</style>`//表示 shadow DOM 子树的根节点。const shaDow = this.attachShadow({ mode: "open" })shaDow.appendChild(template.content.cloneNode(true))}h(el) {return document.createElement(el)}/*** 生命周期*///当自定义元素第一次被连接到文档 DOM 时被调用。connectedCallback() {console.log('我已经插入了!!!嗷呜')}//当自定义元素与文档 DOM 断开连接时被调用。disconnectedCallback() {console.log('我已经断开了!!!嗷呜')}//当自定义元素被移动到新文档时被调用adoptedCallback() {console.log('我被移动了!!!嗷呜')}//当自定义元素的一个属性被增加、移除或更改时被调用attributeChangedCallback() {console.log('我被改变了!!!嗷呜')}}window.customElements.define('xiao-man', Btn)

使用方式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>web Component</title><script src="./btn.js"></script>
</head>
<body><xiao-man></xiao-man>
</body>
</html>

3.如何在Vue 使用

defineCustomElement

告知vue这是一个自定义Component 跳过组件检查

/*vite config ts 配置*/
vue({template:{compilerOptions:{isCustomElement:(tag)=> tag.includes('xiaoman-')}}
})

父组件

<template><div><xiaoman-btn :title=" JSON.stringify(name) "></xiaoman-btn></div>
</template><script setup lang='ts'>
import { ref, reactive, defineCustomElement } from 'vue'
//自定义元素模式  要开启这个模式,只需要将你的组件文件以 .ce.vue 结尾即可
import customVueVue from './components/custom-vue.ce.vue'
const Btn = defineCustomElement(customVueVue)
customElements.define('xiaoman-btn', Btn)const name = ref({a:1})</script><style scoped lang='less'></style>

子组件

<template><div>小满123213 {{title}}</div>
</template><script setup lang='ts'>import { ref, reactive } from 'vue'defineProps<{title:string
}>()</script><style scoped lang='less'></style>

传递参数 如果是对象需要序列化 他是作用于 标签上的

小满Vue3第四十五章(Vue3 Web Components)相关推荐

  1. 【正点原子STM32连载】第四十五章 SD卡实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  2. 【正点原子Linux连载】第四十五章 pinctrl和gpio子系统实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  3. 第四十五章 SQL函数 DATEPART

    文章目录 第四十五章 SQL函数 DATEPART 大纲 参数 描述 Datepart 参数 日期输入格式 无效的参数错误代码 范围和值检查 示例 第四十五章 SQL函数 DATEPART 日期/时间 ...

  4. 第四十五章 外键关键字 - SqlName

    文章目录 第四十五章 外键关键字 - SqlName 用法 详解 默认 第四十五章 外键关键字 - SqlName 为外键指定一个SQL别名. 用法 要覆盖此外键的默认SQL名称,请使用以下语法: F ...

  5. 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    第四十五章 FLASH模拟EEPROM实验 STM32本身没有自带EEPROM,但是STM32具有IAP(在应用编程)功能,所以我们可以把它的FLASH当成EEPROM来使用.本章,我们将利用STM3 ...

  6. 奋斗吧,程序员——第四十五章 柔情似水,佳期如梦

    我换了张办公桌,之前那张办公桌因为靠墙角,屋顶上有个老鼠洞,有时候大白天的,"刺溜"一下一只老鼠窜了上去,很影响心情. 不知道是不是这样糟糕的风水,造成了黄浩这样的"鼠辈 ...

  7. 光盘显示0字节可用_正点原子【STM32-F407探索者】第四十五章 汉字显示实验

    1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 汉字显示在很多单片机系统都需要用到,少则几个字,多则整个 ...

  8. 小满nestjs(第十五章 nestjs 和 RxJs)

    为什么要介绍RxJs 应为 在 Nestjs 已经内置了 RxJs 无需安装 并且Nestjs 也会有一些基于Rxjs提供的API Rxjs 中文文档Observable | RxJS 中文文档 概念 ...

  9. 第四十五章 龙牙现身(老顽童们2 )

    巴哥奔猛地一扬胳膊将对方甩入半空,抢在其再次扑杀过来前,双手疾速互搓,启动赤手模式. 没等她反应过来,那只娇小的龙牙虫噗呲一声钻入老土豆右眼窝,后者仰面栽倒,不再动弹. 那群小土豆们叽喳乱叫,颇感好奇 ...

最新文章

  1. Redis 难题突破,最经典 46 题含详细解析
  2. 快速深入一门语言的几个问题 - Shell909090 - 随笔杂记
  3. 百年难得一见!阿里园区惊现双月争辉奇观!
  4. linux脚本监控网卡流量,Shell脚本实现linux监控网卡实时流量[带宽]的方法
  5. react native ScrollView
  6. 敏感词过滤算法:前缀树算法
  7. canvas绘制图形的相关API
  8. 关于AD域和Exchange邮件服务器的学习总结
  9. HARK学习(三)--文件格式
  10. win7卸载Ubuntu重新安装ubuntu18.04
  11. cpu、socket、core、thread 等术语之间的关系
  12. 【Bison学习笔记】1:生成简易的语法分析程序,使Bsion和Flex协同工作
  13. 数据结构与算法笔记:计算思维之经典农夫过河问题C++实现
  14. spring mvc Discus
  15. w7家庭版计算机策略,gpedit.msc win7家庭版
  16. 4511或74LS48来实现BCD转7段数码管及逻辑状态输入演示
  17. 身为iOS开发,你是愿意在大公司做凤尾,还是在小公司做鸡头?
  18. LeetCode题解(0930):和相同的二元子数组(Python)
  19. 罗技无线手柄F710绑定映射为/dev/joystick
  20. oracle中的left函数,Oracle Left Join

热门文章

  1. 服务器主板tpm的安装位置,win11系统安装如何开启TPM2.0(附带各主板开启方法)
  2. 医学图像配准软件 ANTs(Advanced Normalization Tools)的安装和使用说明
  3. 线程池——核心线程数设置依据
  4. 学会Macdown语法写出数学公式的下标
  5. 浅谈MSP430存储器——Flash和FRAM
  6. cheerio中文文档
  7. gonna, gotta, wanna
  8. rabbit的工作模式
  9. QQ防盗防病毒的几点须知
  10. 方方-前端体系课程(一)