第十节——Vue组件
一、什么是组件
组件(Component)是vue.js中很强大的一个功能,可以将一些可重用的代码进行封重用。 所有的Vue 组件同时也是Vue 的实例,可以接受使用相同的选项对象和提供相同的生命周期钩子。 一句话概括:组件就是可以扩展HTML元素,封装可重用的HTML代码,可以将组件看作自定义的HTML元素。在vue项目中,所有.vue结尾的文件都是一个组件
二、定义组件
1、局部组件
引入组件后,需要在components对象里进行注册,注册后可以直接进行使用
创建qf-button.vue文件
<template><div><button>一个朴实无华的按钮</button></div>
</template>
创建learn-component文件并引入
<template><div><!-- 使用标签语法直接使用组件 --><QfButton></QfButton></div>
</template>
<script>
import QfButton from "./qf-button.vue";
export default {/*** 在components里注册组件* key 是 组件名 value 是对应的组件*/components: {QfButton,},
};
</script>
2、全局组件
全局组件注册后,使用时不需要额外的引入可以直接使用
创建qf-input.vue文件
<template><div><input type="text" placeholder="一个普通的输入框"></div>
</template>
在入口文件处引入
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import QfInput from './qf-input.vue'const app = createApp(App)
/*** 使用component方法注册全局组件,接收两个参数* 第一个参数 组件的名字* 第二个参数 组件的值*/
app.component('qf-input', QfInput)
app.mount('#app')
三、组件传值
1、父传子
在父组件的子组件标签上定义属性,子组件使用props接收
父组件传入
<template><div><!-- 属性名 是对应的 参数名 --><!-- 属性值 是对应的 参数值 --><QfButton buttonName="按钮名字"></QfButton></div>
</template>
<script>
import QfButton from "./qf-button.vue";
export default {components: {QfButton,},
};
</script>
子组件接收
<template><div><!-- 可以直接使用 --><button>{{ buttonName }}</button></div>
</template><script>
export default {// 子组件使用props接收/*** props 属性值 可以是一个数组* 数组里存放当前组件接收到的参数* 注意:props定义的参数名和父组件传入的参数名必须一致*/// props: ["buttonName"],/*** props 属性值 可以是一个对象** 对象的key 是 当前组件接收的参数* 对象的value 又是一个对象* 这种方式了解即可*/props: {buttonName: {/** type 接收参数的类型 */type: String,/** required 参数是否必传 */required: false,/** 参数默认值 */default: "默认按钮名",},},
};
</script>
2、子传父
通过事件传递,子组件使用$emit传递一个事件给父组件。$emit第一个参数是事件名,第二个参数要传给父组件的参数。父组件在子组件标签上使用@接收传过来的事件
qf-input每次输入的时候把输入的内容传给父组件
子组件
<template><div><input @input="inputChange" type="text" placeholder="一个普通的输入框" /></div>
</template><script>
export default {methods: {inputChange(event) {/*** 使用this.$emit方法* 把当前输入的信息传给父组件*//*** 第一个参数是抛出的事件名* 第二个参数是要传给组件的信息 第二个参数可以不传*/this.$emit("componentChange", event.target.value);},},
};
</script>
父组件
<template><div><!-- 属性名 是对应的 参数名 --><!-- 属性值 是对应的 参数值 --><QfButton a="你" b="好" :info="info"></QfButton><!-- 使用 @ 接收 子组件抛出的事件并定义触发的函数inputChange 如果不写括号 会自动接收到传入的参数--><qf-input @componentChange="inputChange"></qf-input><!-- 如果inputChange 函数 带括号 需要使用$event 拿到传入的参数 --><!-- <qf-input @componentChange="inputChange($event)"></qf-input> --></div>
</template>
<script>
import QfButton from "./qf-button.vue";
export default {components: {QfButton,},methods: {inputChange (msg) {console.log(msg)}}
};
</script>
3、祖孙传值
provide / inject 依赖注入
provide:可以让我们指定想要提供给后代组件的数据或方法
inject:在任何后代组件中接收想要添加在这个组件上的数据或方法,不管组件嵌套多深都可以直接拿来用
创建子组件child1.vue、创建孙组件child2.vue 按照等级依次引入
在最上级组件(爷爷组价)写入
<template><div><Child1></Child1></div>
</template>
<script>
import Child1 from "./child1.vue";export default {components: {Child1,},/*** 使用provide 统一下发值* provide 是一个函数 函数必须有返回值* 返回的值可以在任意子级组件接收*/provide () {return {msg: "最上级组件传值",handle: this.handle}},methods: {handle (msg) {console.log("触发接收?", msg)}}
};
</script>
孙组件接收child2.vue
<template><div>孙组件 ---{{ msg }}</div><button @click="handle('传入的')">+1</button>
</template>
<script>
export default {// 使用 inject 接收 上级组件统一下发的值inject: ["msg", 'handle'],
};
</script>
provide / inject 使用场景
国际化
主题色切换
祖孙传值
$attrs
多层嵌套组件传递数据时,如果只是传递数据,而不做中间处理的话就可以用这个,比如父组件向孙子组件传递数据时
$attrs:包含父作用域里除 class 和 style 除外的非 props 属性集合。通过 this.$attrs 获取父作用域中所有符合条件的属性集合,然后还要继续传给子组件内部的其他组件,就可以通过 v-bind="$attrs"
爷爷组件
<template><div><Child1 @handle2="handle" name="来自爷爷的问候"></Child1></div>
</template>
<script>
import Child1 from "./child1.vue";export default {components: {Child1,},methods: {handle (msg) {console.log("触发接收?", msg)}}
};
</script>
子组件
<template><div>子组件<!-- 使用 v-bind="$attrs" 继续往下传--><Child2 v-bind="$attrs"></Child2></div>
</template><script>
import Child2 from "./child2.vue";
export default {components: {Child2,},
};
</script>
孙组件
<template><div>孙组件 ---{{ msg }}</div>
</template>
<script>
export default {/*** 超纲一点生命周期😄* 组件创建完成后调用*/created() {/*** 使用 this.$attrs 获取上级组件往下抛的所有的值* 注意:这里传入的事件会在事件名前加上on,并且驼峰 如 爷爷组件传入的* @handle2 在这里变成了onHandle2*/console.log(this.$attrs);},
};
</script>
4、兄弟组件传值
一般使用状态管理解决
event bus
EventBus 是中央事件总线,不管是父子组件,兄弟组件,跨层级组件等都可以使用它完成通信操作。
在 Vue 3 中,由于 Vue 2 中的全局事件总线(Vue.prototype.$emit 和 Vue.prototype.$on)被移除,我们需要使用其他方式来实现类似的功能。在 Vue 3 中,可以使用 mitt 这个第三方库来创建一个事件总线。
安装
npm install mitt
使用
在需要使用事件总线的地方导入和创建它
import mitt from 'mitt';
const eventBus = mitt();
发送事件
要发送事件,你可以使用 eventBus.emit(eventName, payload) 方法
eventBus.emit('eventName', payload);
监听事件
eventBus.on('eventName', (payload) => {// 处理事件的回调逻辑
});
取消监听
eventBus.off('eventName', handler);相关文章:
第十节——Vue组件
一、什么是组件 组件(Component)是vue.js中很强大的一个功能,可以将一些可重用的代码进行封重用。 所有的Vue 组件同时也是Vue 的实例,可以接受使用相同的选项对象和提供相同的生命周期钩子。 一句话概括:组件就是可以扩展HTML元素ÿ…...
Redis(01)| 数据结构
这里写自定义目录标题 Redis 速度快的原因除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。 因此,这次我…...
SpringBoot工程启动时自动创建数据库、数据表
文章目录 一,序二,自动创建数据库1. 数据源配置2. 修改支持数据库创建 三,自动创建数据库表以及数据1. 准备DDL、DML语句1.)典型DDL语句2.)典型DML语句 2. 设置初始化参数 四、源码传送 一,序 针对Java工程…...
Uni-app智慧工地可视化信息平台源码
智慧工地的核心是数字化,它通过传感器、监控设备、智能终端等技术手段,实现对工地各个环节的实时数据采集和传输,如环境温度、湿度、噪音等数据信息,将数据汇集到云端进行处理和分析,生成各种报表、图表和预警信息&…...
计算机网络重点概念整理-第五章 传输层【期末复习|考研复习】
第五章 传输层 【期末复习|考研复习】 计算机网络系列文章传送门: 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 第五章 传输层 【期末复习|考研复习…...
Java毕业设计 SpringBoot 新能源充电桩管理系统
Java毕业设计 SpringBoot 新能源充电桩管理系统 SpringBoot 新能源充电桩管理系统 功能介绍 管理员 登录 验证码 注册 系统用户管理 普通用户管理 通知公告管理 留言管理 充电站管理 充电桩管理 充电桩预约 充电管理 订单管理 修改密码 普通用户 登录 修改个人资料 通知公告…...
JNI接口
NewStringUTF和NewString接口测试 打开输入法“显示表情与符号” 右键,拷贝字符简介 🍌 香蕉 Unicode: U1F34C,UTF-8: F0 9F 8D 8C unicode码 🍌 \U0001f34c utf-8编码为0xf09f8d8c,结合char或char8_t的长度&…...
国内好用的免费ai软件
国内就只推荐几个大厂,基本感受都差不多 百度文心一言 百度研发的知识增强大语言模型,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 地址:文心一言 (baidu.com) 阿里通…...
MAC缓解WebUI提示词反推
当前环境信息: 在mac上安装好stable diffusion后,能做图片生成了之后,遇到一些图片需要做提示词反推,这个时候需要下载一个插件,参考: https://gitcode.net/ranting8323/stable-diffusion-webui-wd14-tagg…...
【设计模式之原型模式 】– C++
5. 原型模式 – 复制粘贴,一摸一样 简介 原型模式(Prototype Pattern)是一种创建型设计模式,其主要目的是通过复制现有对象来创建新的对象,而无需从头开始构建。 使用场景 它通常用于以下情况: 当一个系统…...
Flask路由机制分析之二
一、前言 上篇 《Flask 路由机制分析之一》主要讲了Python函数的特性以及装饰器的基本概念,这节我们具体分析一下路由内部机制,Flask路由依赖于werkzegu的routing模块来实现。 二、werkzegu的routing模块介绍 Werkzegu库的routing模块主要功能在于URL…...
vue中如何获取当时时间时分秒
在 Vue 中可以使用 JavaScript 中的 Date 对象来获取当前时间,然后使用 Vue 中的数据绑定将时间显示在页面上。 <template><div><p>当前时间:{{ time }}</p></div> </template><script> export default {dat…...
matlab simulink 直线一级倒立摆控制(自起摆和稳态控制)
1、内容简介 略 6-可以交流、咨询、答疑 2、内容说明 控制器设计 自起摆建模 规定正方向:顺时针为角度(力矩)正方向,向右为位移正方向。 在规定的正方向条件下,图 1 所示摆杆的角度φ为正值, 下车向右加…...
Transformers实战(二)快速入门文本相似度、检索式对话机器人
Transformers实战(二)快速入门文本相似度、检索式对话机器人 1、文本相似度 1.1 文本相似度简介 文本匹配是一个较为宽泛的概念,基本上只要涉及到两段文本之间关系的,都可以被看作是一种文本匹配的任务, 只是在具体…...
【错误解决方案】ModuleNotFoundError: No module named ‘PeptideBuilder‘
1. 错误提示 在python程序中,试图导入一个不存在的模块PeptideBuilder导致的错误: 错误提示:ModuleNotFoundError: No module named PeptideBuilder 2. 解决方案 解决方案是确保你已经正确安装了PeptideBuilder模块。你可以通过pip来安装它…...
汇编学习(1)
汇编、CPU架构、指令集、硬编码之间的关系 ● 汇编语言:这是一种低级语言,用于与硬件直接交互。它是由人类可读的机器码或指令组成的,这些指令告诉CPU如何执行特定的任务。每条汇编指令都有一个对应的机器码指令,CPU可以理解和执…...
C#,数值计算——分类与推理Svmlinkernel的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public class Svmlinkernel : Svmgenkernel { public int n { get; set; } public double[] mu { get; set; } public Svmlinkernel(double[,] ddata, double[] yy) : base(yy, ddata) …...
【鸿蒙软件开发】ArkTS容器组件之Badge
文章目录 前言一、Badge组件1.1 子组件1.2 接口接口1参数 接口2参数 BadgePosition枚举说明BadgeStyle对象说明 1.3 示例代码 总结 前言 Badge组件:可以附加在单个组件上用于信息标记的容器组件。 一、Badge组件 可以附加在单个组件上用于信息标记的容器组件。 说…...
H5游戏源码分享-命悬一线
H5游戏源码分享-命悬一线 在合适的时机跳下绳子,能安全站到木桩上,就通过。 游戏源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name&…...
【电路笔记】-交流电阻和阻抗
交流电阻和阻抗 文章目录 交流电阻和阻抗1、概述:电阻率2、交流状态与直流状态近似性3、交流状态与直流状态的差异性3.1 趋肤效应(The Skin Effect)3.2 靠近效应(The Proximity Effect) 4、总结 电阻是一种特性,用于表征当电压差施…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
