当前位置: 首页 > news >正文

【愚公系列】《循序渐进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)功能,允许你将一个对象的选项(如 datamethodsmounted 等)注入到所有组件中。在这个例子中,定义了一个全局的 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 中的函数。在这里定义了 cd,这两个变量是组件本身定义的,不是来自混入。返回这些变量,使它们可以在模板中使用。
  • 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.代码逻辑总结

  1. 全局 Mixin:使用 App.mixin 定义了一个全局的混入(mixin),这个混入包含了:

    • 所有组件都有一个 title 属性。
    • 所有组件都拥有数据 a, b, c
    • 所有组件都拥有 mounted() 钩子,且会输出 "Mixin对象mounted"
  2. 组件 my-com

    • 使用了 Vue 3 的 Composition API,其中定义了 cd 数据。
    • created() 钩子中,组件访问了从混入中继承的 a, b, c,以及组件自身的 d 数据,打印到控制台。
    • mounted() 钩子中,打印 "组件本身mounted"
  3. 组件 my-com1, my-com2, my-com3

    • 这三个组件没有使用 mixin,只有一个 title 属性,在模板中展示该值。
  4. 组件渲染:

    • my-com 组件会输出 title,并且其行为受到 mixin 的影响,能访问到 a, b, c 数据。
    • my-com1, my-com2, my-com3 组件也会显示 title,但它们没有 mixin,因此只接收 title

🔎7.最终输出

  1. 在浏览器控制台,my-com 组件在创建时会输出:

    • a b c d(从 mixin 和组件自身的数据中读取)
  2. 每个组件的 mounted 钩子都会执行,控制台输出:

    • "Mixin对象mounted"(来自 mixin)
    • "组件本身mounted"(来自组件本身)
  3. 页面中显示四个组件:

    • 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

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…...

大一计算机的自学总结:异或运算

前言 异或运算这个操作看上去很匪夷所思&#xff0c;实际上作用非常大。 一、异或运算的性质 1.异或运算就是无进位相加。 2.满足交换律、结合律。 3.0^nn&#xff0c;n^n0。 4.若集合B为集合A子集&#xff0c;集合A异或和为x&#xff0c;集合B异或和为y&#xff0c;则集…...

通过protoc工具生成proto的pb.go文件以及使用protoc-go-inject-tag工具注入自定义标签

1.ProtoBuf认识,安装以及用法 参考:[golang 微服务] 3. ProtoBuf认识&#xff0c;安装以及golang 中ProtoBuf使用 2. 使用protoc-go-inject-tag工具注入自定义标签 这里有一个案例: syntaxproto3; package test;option go_package ".;test";message MyMessage {int6…...

C语言练习(29)

13个人围成一圈&#xff0c;从第1个人开始顺序报号1、2、3。凡报到“3”者退出圈子&#xff0c;找出最后留在圈子中的人原来的序号。本题要求用链表实现。 #include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 typedef struct Node {int num;struct Nod…...

Android实训九 数据存储和访问

实训9 数据存储和访问 一、【实训目的】 1、 SharedPreferences存储数据; 2、 借助Java的I/O体系实现文件的存储&#xff0c; 3、使用Android内置的轻量级数据库SQLite存储数据; 二、【实训内容】 1、实现下图所示的界面&#xff0c;实现以下功能&#xff1a; 1&#xff…...

实验一---典型环节及其阶跃响应---自动控制原理实验课

一 实验目的 1.掌握典型环节阶跃响应分析的基本原理和一般方法。 2. 掌握MATLAB编程分析阶跃响应方法。 二 实验仪器 1. 计算机 2. MATLAB软件 三 实验内容及步骤 利用MATLAB中Simulink模块构建下述典型一阶系统的模拟电路并测量其在阶跃响应。 1.比例环节的模拟电路 提…...

SOME/IP--协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1 Speci…...

matlab中,fill命令用法

在 MATLAB 中&#xff0c;fill 命令用于创建填充多边形的图形对象。使用 fill 可以在二维坐标系中绘制填充的区域&#xff0c;通常用于绘制图形的背景或显示数据分布。 基本语法 fill(X, Y, C)X 和 Y 是同样长度的向量&#xff0c;定义了多边形的顶点坐标。C 是颜色&#xff0…...

【Linux】Linux C判断两个IPv6地址是否有包含关系

功能说明 要判断两个 IPv6 地址是否具有包含关系&#xff0c;包括前缀的比较&#xff0c;可以通过以下步骤实现&#xff1a; 解析 IPv6 地址和前缀&#xff1a;将两个 IPv6 地址和它们的前缀长度解析为二进制形式。生成掩码&#xff1a;根据前缀长度生成掩码。按位比较&#…...

【玩转全栈】----Django基本配置和介绍

目录 Django基本介绍&#xff1a; Django基本配置&#xff1a; 安装Django 创建项目 创建app 注册app Django配置路由URL Django创建视图 启动项目 Django基本介绍&#xff1a; Django是一个开源的、基于Python的高级Web框架&#xff0c;旨在以快速、简洁的方式构建高质量的Web…...

mysql 学习6 DML语句,对数据库中的表进行 增 删 改 操作

添加数据 我们对 testdatabase 数据中 的 qqemp 这张表进行 增加数据&#xff0c;在这张表 下 打开 命令行 query console 在 软件中就是打开命令行的意思 可以先执行 desc qqemp; 查看一下当前表的结构。 插入一条数据 到qqemp 表&#xff0c;插入时要每个字段都有值 insert…...

自动化运维在云环境中的完整实践指南

随着云计算的普及,越来越多的企业将业务迁移到云上。云环境的高动态性和复杂性使得传统的手动运维方式难以应对,自动化运维成为提升效率、降低成本、保障系统稳定性的关键。本文将详细介绍如何在云环境中实施自动化运维,涵盖工具选择、实施步骤和最佳实践。 © ivwdcwso…...

一分钟搭建promehteus+grafana+alertmanager监控平台

为什么要自己搭建一个监控平台 平时进行后端开发&#xff0c;特别是微服务的后端可开发&#xff0c;一定少不了对接监控平台&#xff0c;但是平时进行一些小功能的测试又没有必要每次都手动安装那么多软件进行一个小功能的测试&#xff0c;这里我使用docker-compose搭建了一个…...

【10.2】队列-设计循环队列

一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普…...

设置jmeter界面图标字体大小

设置jmeter界面图标字体大小 方法&#xff1a;点击“选项” -> 点击放大、缩小。&#xff08;可进行全局的菜单、左侧目录结构树、元件界面显示等字体图标的放大、缩小。&#xff09;...

Xposed-Hook

配置 Xposed 模块的 AndroidManifest.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"your.package.name"><applicationandr…...

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对…...

QT:图像上绘制图形

需求描述 1、展示一张图像 2、在图像上可以使用数据绘制图像&#xff1a;矩形、不规则图形、线条 3、有按键可以选择 概要设计 规划布局如下 1、左边是Qlabel 用于展示图片 2、右边是三个按钮 具体实现 1、 首先设计 UI 界面&#xff0c;对控件进行布局 在 mainwindow.u…...

GPU上没程序在跑但是显存被占用

原因&#xff1a;存在僵尸线程&#xff0c;运行完但是没有释放内存 查看僵尸线程 fuser -v /dev/nvidia*关闭僵尸线程 pkill -9 -u 用户名 程序名 举例&#xff1a;pkill -9 -u grs python参考&#xff1a;https://blog.csdn.net/qq_40206371/article/details/143798866...

wordpress代码结构解析

WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;广泛用于构建网站和博客。要解析 WordPress 代码&#xff0c;首先需要了解其核心结构、主要文件和常用的函数。以下是 WordPress 代码解析的基本指南&#xff1a; --- ### 1. *…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

AI书签管理工具开发全记录(十八):书签导入导出

文章目录 AI书签管理工具开发全记录&#xff08;十八&#xff09;&#xff1a;书签导入导出1.前言 &#x1f4dd;2.书签结构分析 &#x1f4d6;3.书签示例 &#x1f4d1;4.书签文件结构定义描述 &#x1f523;4.1. ​整体文档结构​​4.2. ​核心元素类型​​4.3. ​层级关系4.…...

[KCTF]CORE CrackMe v2.0

这个Reverse比较古老&#xff0c;已经有20多年了&#xff0c;但难度确实不小。 先查壳 upx压缩壳&#xff0c;0.72&#xff0c;废弃版本&#xff0c;工具无法解压。 反正不用IDA进行调试&#xff0c;直接x32dbg中&#xff0c;dump内存&#xff0c;保存后拖入IDA。 这里说一下…...