【愚公系列】《循序渐进Vue.js 3.x前端开发实践》030-自定义组件的插槽Mixin
| 标题 | 详情 |
|---|---|
| 作者简介 | 愚公搬代码 |
| 头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
| 近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。 |
| 博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
| 欢迎 | 👍点赞、✍评论、⭐收藏 |
文章目录
- 🚀前言
- 🚀一、自定义组件的插槽Mixin
- 🔎1.HTML 部分解析
- 🔎2.JavaScript 部分解析
- 🔎3.全局 Mixin 设置
- 🔎4.组件定义和注册
- 🦋4.1 组件 `my-com`(使用了 Mixin)
- 🦋4.2 组件 `my-com1`, `my-com2`, `my-com3`(没有使用 Mixin)
- 🔎5.组件注册和挂载
- 🔎6.代码逻辑总结
- 🔎7.最终输出
- 🔎8.总结
🚀前言
在 Vue.js 的组件化开发中,插槽(Slots)是一种强大的特性,使得组件的内容更加灵活和可定制。通过插槽,我们可以在组件中插入动态内容,实现更高的重用性和可配置性。然而,随着项目复杂度的提升,如何高效地管理和复用插槽的配置就成为了一个重要课题。在这个背景下,Mixin 作为一种复用逻辑的方式,能够与插槽结合使用,帮助我们更好地组织代码。
本篇文章将围绕自定义组件的插槽 Mixin 展开,深入解析如何创建和使用 Mixin 来管理插槽逻辑。我们将探讨插槽的基本用法及其高级应用场景,介绍如何通过 Mixin 提取和复用插槽相关的逻辑,提升组件的可维护性和灵活性。此外,我们还将分享一些最佳实践,帮助你在实际项目中有效地应用这些概念。
🚀一、自定义组件的插槽Mixin
🔎1.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"><title>Vue组件Mixin</title><script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body><div id="Application"><my-com></my-com><my-com1 title="组件1"></my-com1><my-com2 title="组件2"></my-com2><my-com3 title="组件3"></my-com3></div><script>...</script>
</body>
</html>
<div id="Application">:Vue 应用的挂载容器,所有 Vue 组件都会被渲染到这个容器内。- 这里包含了四个组件:
<my-com>:一个使用了混入(mixin)功能的组件。<my-com1>、<my-com2>、<my-com3>:三个没有使用混入的简单组件,它们只接收一个title属性。
🔎2.JavaScript 部分解析
const { createApp } = Vue
const App = createApp({})
createApp({}):创建一个 Vue 应用实例App,用于注册组件和挂载应用。
🔎3.全局 Mixin 设置
App.mixin({props: ["title"],data() {return {a: "a",b: "b",c: "c"}},mounted() {console.log("Mixin对象mounted")}
})
App.mixin:这是 Vue 中的混入(Mixin)功能,允许你将一个对象的选项(如data、methods、mounted等)注入到所有组件中。在这个例子中,定义了一个全局的 mixin。props: ["title"]:每个组件都会接收到一个title属性,这意味着所有组件都能访问到title。data():为每个组件提供了一些数据,a,b,c三个数据都会被注入到所有组件中。每个组件都能访问这些数据。mounted():每个组件都将调用这个生命周期钩子函数,并输出"Mixin对象mounted"。
🔎4.组件定义和注册
🦋4.1 组件 my-com(使用了 Mixin)
const com = {setup() {const c = "C"const d = "d"return { c, d }},created() {// a, b, c, d 都存在console.log(this.a, this.b, this.c, this.d)},mounted() {console.log("组件本身mounted")},template: `<div style="border:red solid 2px;">{{title}}</div>`
}
setup():这是 Vue 3 的 Composition API 中的函数。在这里定义了c和d,这两个变量是组件本身定义的,不是来自混入。返回这些变量,使它们可以在模板中使用。created():当组件实例化后执行。由于这个组件使用了全局 mixin,因此this.a,this.b,this.c,this.d都可以访问到。其中a,b,c是从 mixin 中继承来的数据,而d是组件自身的数据。console.log(this.a, this.b, this.c, this.d):输出a,b,c,d的值。
mounted():组件挂载后执行,这里输出"组件本身mounted"。注意,mounted钩子在 mixin 和组件本身中都存在,都会被调用。template:模板部分,显示title属性。
🦋4.2 组件 my-com1, my-com2, my-com3(没有使用 Mixin)
const com1 = {template: `<div style="border:red solid 2px;">{{title}}</div>`
}const com2 = {template: `<div style="border:blue solid 2px;">{{title}}</div>`
}const com3 = {template: `<div style="border:green solid 2px;">{{title}}</div>`
}
com1,com2,com3这三个组件没有使用 mixin,它们只是简单的组件。它们的模板都显示了title属性,但没有额外的逻辑或数据。- 这些组件将会接受传递给它们的
title属性并在模板中渲染。
- 这些组件将会接受传递给它们的
🔎5.组件注册和挂载
App.component("my-com1", com1)
App.component("my-com2", com2)
App.component("my-com3", com3)
App.component("my-com", com)
App.mount("#Application")
App.component:这些语句注册了四个组件(my-com1,my-com2,my-com3,my-com)到 Vue 应用中。App.mount("#Application"):将 Vue 应用挂载到id="Application"的 DOM 元素中。
🔎6.代码逻辑总结
-
全局 Mixin:使用
App.mixin定义了一个全局的混入(mixin),这个混入包含了:- 所有组件都有一个
title属性。 - 所有组件都拥有数据
a,b,c。 - 所有组件都拥有
mounted()钩子,且会输出"Mixin对象mounted"。
- 所有组件都有一个
-
组件
my-com:- 使用了 Vue 3 的 Composition API,其中定义了
c和d数据。 - 在
created()钩子中,组件访问了从混入中继承的a,b,c,以及组件自身的d数据,打印到控制台。 - 在
mounted()钩子中,打印"组件本身mounted"。
- 使用了 Vue 3 的 Composition API,其中定义了
-
组件
my-com1,my-com2,my-com3:- 这三个组件没有使用 mixin,只有一个
title属性,在模板中展示该值。
- 这三个组件没有使用 mixin,只有一个
-
组件渲染:
my-com组件会输出title,并且其行为受到 mixin 的影响,能访问到a,b,c数据。my-com1,my-com2,my-com3组件也会显示title,但它们没有 mixin,因此只接收title。
🔎7.最终输出
-
在浏览器控制台,
my-com组件在创建时会输出:a b c d(从 mixin 和组件自身的数据中读取)
-
每个组件的
mounted钩子都会执行,控制台输出:"Mixin对象mounted"(来自 mixin)"组件本身mounted"(来自组件本身)
-
页面中显示四个组件:
my-com显示title,同时受 mixin 的影响。my-com1,my-com2,my-com3显示各自的title,分别为"组件1","组件2","组件3"。

🔎8.总结
通过这段代码,我们展示了 Vue 3 中的 mixin 特性。Mixin 使得我们可以将组件共享的逻辑抽象出来,避免重复代码。混入的内容会被添加到所有组件中,在每个组件实例中生效。通过全局 mixin,我们可以方便地为多个组件添加相同的属性、数据和生命周期钩子。
相关文章:
【愚公系列】《循序渐进Vue.js 3.x前端开发实践》030-自定义组件的插槽Mixin
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…...
大一计算机的自学总结:异或运算
前言 异或运算这个操作看上去很匪夷所思,实际上作用非常大。 一、异或运算的性质 1.异或运算就是无进位相加。 2.满足交换律、结合律。 3.0^nn,n^n0。 4.若集合B为集合A子集,集合A异或和为x,集合B异或和为y,则集…...
通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签
1.ProtoBuf认识,安装以及用法 参考:[golang 微服务] 3. ProtoBuf认识,安装以及golang 中ProtoBuf使用 2. 使用protoc-go-inject-tag工具注入自定义标签 这里有一个案例: syntaxproto3; package test;option go_package ".;test";message MyMessage {int6…...
C语言练习(29)
13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。本题要求用链表实现。 #include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 typedef struct Node {int num;struct Nod…...
Android实训九 数据存储和访问
实训9 数据存储和访问 一、【实训目的】 1、 SharedPreferences存储数据; 2、 借助Java的I/O体系实现文件的存储, 3、使用Android内置的轻量级数据库SQLite存储数据; 二、【实训内容】 1、实现下图所示的界面,实现以下功能: 1ÿ…...
实验一---典型环节及其阶跃响应---自动控制原理实验课
一 实验目的 1.掌握典型环节阶跃响应分析的基本原理和一般方法。 2. 掌握MATLAB编程分析阶跃响应方法。 二 实验仪器 1. 计算机 2. MATLAB软件 三 实验内容及步骤 利用MATLAB中Simulink模块构建下述典型一阶系统的模拟电路并测量其在阶跃响应。 1.比例环节的模拟电路 提…...
SOME/IP--协议英文原文讲解2
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1 Speci…...
matlab中,fill命令用法
在 MATLAB 中,fill 命令用于创建填充多边形的图形对象。使用 fill 可以在二维坐标系中绘制填充的区域,通常用于绘制图形的背景或显示数据分布。 基本语法 fill(X, Y, C)X 和 Y 是同样长度的向量,定义了多边形的顶点坐标。C 是颜色࿰…...
【Linux】Linux C判断两个IPv6地址是否有包含关系
功能说明 要判断两个 IPv6 地址是否具有包含关系,包括前缀的比较,可以通过以下步骤实现: 解析 IPv6 地址和前缀:将两个 IPv6 地址和它们的前缀长度解析为二进制形式。生成掩码:根据前缀长度生成掩码。按位比较&#…...
【玩转全栈】----Django基本配置和介绍
目录 Django基本介绍: Django基本配置: 安装Django 创建项目 创建app 注册app Django配置路由URL Django创建视图 启动项目 Django基本介绍: Django是一个开源的、基于Python的高级Web框架,旨在以快速、简洁的方式构建高质量的Web…...
mysql 学习6 DML语句,对数据库中的表进行 增 删 改 操作
添加数据 我们对 testdatabase 数据中 的 qqemp 这张表进行 增加数据,在这张表 下 打开 命令行 query console 在 软件中就是打开命令行的意思 可以先执行 desc qqemp; 查看一下当前表的结构。 插入一条数据 到qqemp 表,插入时要每个字段都有值 insert…...
自动化运维在云环境中的完整实践指南
随着云计算的普及,越来越多的企业将业务迁移到云上。云环境的高动态性和复杂性使得传统的手动运维方式难以应对,自动化运维成为提升效率、降低成本、保障系统稳定性的关键。本文将详细介绍如何在云环境中实施自动化运维,涵盖工具选择、实施步骤和最佳实践。 © ivwdcwso…...
一分钟搭建promehteus+grafana+alertmanager监控平台
为什么要自己搭建一个监控平台 平时进行后端开发,特别是微服务的后端可开发,一定少不了对接监控平台,但是平时进行一些小功能的测试又没有必要每次都手动安装那么多软件进行一个小功能的测试,这里我使用docker-compose搭建了一个…...
【10.2】队列-设计循环队列
一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普…...
设置jmeter界面图标字体大小
设置jmeter界面图标字体大小 方法:点击“选项” -> 点击放大、缩小。(可进行全局的菜单、左侧目录结构树、元件界面显示等字体图标的放大、缩小。)...
Xposed-Hook
配置 Xposed 模块的 AndroidManifest.xml: <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"your.package.name"><applicationandr…...
设计模式Python版 原型模式
文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对…...
QT:图像上绘制图形
需求描述 1、展示一张图像 2、在图像上可以使用数据绘制图像:矩形、不规则图形、线条 3、有按键可以选择 概要设计 规划布局如下 1、左边是Qlabel 用于展示图片 2、右边是三个按钮 具体实现 1、 首先设计 UI 界面,对控件进行布局 在 mainwindow.u…...
GPU上没程序在跑但是显存被占用
原因:存在僵尸线程,运行完但是没有释放内存 查看僵尸线程 fuser -v /dev/nvidia*关闭僵尸线程 pkill -9 -u 用户名 程序名 举例:pkill -9 -u grs python参考:https://blog.csdn.net/qq_40206371/article/details/143798866...
wordpress代码结构解析
WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统(CMS),广泛用于构建网站和博客。要解析 WordPress 代码,首先需要了解其核心结构、主要文件和常用的函数。以下是 WordPress 代码解析的基本指南: --- ### 1. *…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
