Vue3+TypeScript学习笔记(三十五)

简介: 本节记录Web Component相关知识内容

定义:Web Components提供了及语言声支持的,对视图层封装的能力,可以让单个组件相关的HTML、CSS、JavaScript模板运行在以html为界限的环境中,不会影响到全局和其他组件。此外标签提供了完整的生命周期钩子函数

简单的演示案例

<!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">
    <script src="./btn.js"></script>
    <title>Document</title>
</head>
<body>
    <xiaoman-btn></xiaoman-btn>
    <xiaoman-btn></xiaoman-btn>
    <xiaoman-btn></xiaoman-btn>
</body>
</html>
class Btn extends HTMLElement {
    constructor() {
        super()
        // 使用const定义的shaDom在类实例化后无法访问,attachShadow创建一个影子节点用于隔离选择器
        const shaDom = this.attachShadow({ mode: 'open' })
        this.p = this.h('p')
        // 使用innerText
        this.p.innerText = '小满'
        // 设置样式(注意两个参数都是字符串)
        this.p.setAttribute(
            'style',
            'width:200px;height:200px;border:1px solid black'
        )
        // 将节点添加到容器中
        shaDom.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('xiaoman-btn', Btn)

template模式

index.html的内容保持不变

class Btn extends HTMLElement {
    constructor() {
        super()
        // 使用const定义的shaDom在类实例化后无法访问,attachShadow创建一个影子节点用于隔离选择器
        const shaDom = this.attachShadow({ mode: 'open' })
        // 创建一个template元素
        this.p = this.h('template')
        this.p.innerHTML = `
            <style>
                div{
                    width:200px;
                    height:200px;
                    background:red;
                }
            </style>
            <div>小满</div>
        `
        // 将节点添加到容器中,注意需要克隆并且只有template元素才有content属性
        shaDom.appendChild(this.p.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('xiaoman-btn', Btn)
相关文章
|
5天前
|
JavaScript 前端开发 编译器
TypeScript 学习笔记
TypeScript 学习笔记
|
5天前
|
JavaScript 前端开发 数据可视化
前端开发使用 Vue 3 + TypeScript + Pinia + Element Plus + ECharts
前端开发使用 Vue 3 + TypeScript + Pinia + Element Plus + ECharts
43 0
|
5天前
|
JavaScript 前端开发
在Vue中使用TypeScript的常见问题有哪些?
在Vue中使用TypeScript的常见问题有哪些?
35 2
|
5天前
|
JavaScript 前端开发
在Vue中使用TypeScript的优缺点是什么?
在Vue中使用TypeScript的优缺点是什么?
18 0
|
5天前
|
JavaScript
在 Vue 中如何使用 TypeScript?
在 Vue 中如何使用 TypeScript?
16 0
|
5天前
|
JavaScript 安全 容器
Vue3 + setup + TypeScript: 构建现代、类型安全的Vue应用的关键技巧总结
当使用 setup 的时候,组件直接引入就可以了,不需要再自己手动注册
|
5天前
|
JavaScript Go 数据库
用Typescript 的方式封装Vue3的表单绑定,支持防抖等功能。
Vue3 的父子组件传值、绑定表单数据、UI库的二次封装、防抖等,想来大家都很熟悉了,本篇介绍一种使用 Typescript 的方式进行统一的封装的方法。
|
5天前
|
前端开发 JavaScript 测试技术
Vue3+Vite+TypeScript常用项目模块详解(下)
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
|
5天前
|
JavaScript 前端开发 API
Vue3+Vite+TypeScript常用项目模块详解
现在无论gitee还是github,越来越多的前端开源项目采用Vue3+Vite+TypeScript+Pinia+Elementplus+axios+Sass(css预编译语言等),其中还有各种项目配置比如eslint 校验代码工具配置等等,而我们想要进行前端项目的二次开发,就必须了解会使用这些东西,所以作者写了这篇文章进行简单的介绍。
Vue3+Vite+TypeScript常用项目模块详解
|
5天前
|
监控 JavaScript 安全
TypeScript在员工上网行为监控中的类型安全实践
本文演示了如何使用TypeScript在员工上网行为监控系统中实现类型安全。通过定义`Website`类型和`MonitoringData`接口,确保数据准确性和可靠性。示例展示了从监控设备获取数据和提交到网站的函数,强调了类型定义在防止错误、提升代码可维护性方面的作用。
36 7