Vue组件通信

ops/2025/3/14 7:22:48/

Vue组件通信

Vue组件放在components目录:

1、组件是对于HTML标签的扩展

2、以.vue结尾的文件都是叫做组件

APP.vue叫做根组件

TODO: 组件的文件名字的首字母大写

组件的引入

import Xxx from './components/Xxx.vue'

App.vue:

<script>
import Swiper1 from './components/Swiper.vue'
export default{components:{Swiper222:Swiper1}
}
</script>
<template><div><Swiper222></Swiper222></div>
</template>

规范写法:

<script>
import Swiper from './components/Swiper.vue'export default {components: {Swiper // 使用一致的命名(可以省略冒号后面的)}
}
</script><template><div><Swiper></Swiper> </div>
</template>

建议写成:(通过 script setup 默认导入)只需导入过后就可以在template中调用了

<script setup>
import Swiper from './components/Swiper.vue'</script><template><div><Swiper></Swiper> </div>
</template>

在template中相当于是引入了一个<Swiper222></Swiper222>的标签

Swiper.vue:

<template><div>这个是一个swiper组件</div>
</template>

上述操作相当于是将Swiper.vue 的相关内容通过导入,封装为一个新的标签供App.vue进行调用


组件传值


在这里插入图片描述

1、父组件—》传递数据到—》子组件

在这里插入图片描述
父组件中:

<子组件名称 :变量=父组件将要传递的数据></子组件名称>

<template>
<!-- 父组件传值给子组件 -->
<!-- 在父组件中调用 子组件的属性名进行绑定数据 -->
<Header :fatherList="List"></Header>
</template><script setup>
import Header from './components/Header.vue';
const List =[1,2,3,4,5,6,7,8,9,10]</script>

Header.vue

<template><div>这是一个header组件<div v-for="(item,index) in fatherList" :key="index">{{item}}</div></div>
</template><script setup>
// 子组件接收父组件传过来的数据
const props = defineProps({fatherList:{type:Array,default:[]}
})</script>

2、子组件—》传递数据到—》父组件

在这里插入图片描述

步骤流程

  1. 父组件 App.vue:

    • 导入子组件:导入 Header 组件。
    • 监听子组件事件:在模板中使用 @sendData="handleDataFromChild" 监听子组件触发的 sendData 事件。
    • 定义事件处理方法:定义 handleDataFromChild 方法来处理从子组件接收到的数据,并将其存储在 childData 中。
    • 显示数据:在模板中显示从子组件接收到的数据。
  2. 子组件 Header.vue:

    • 定义事件:使用 defineEmits 定义一个名为 sendData 的事件。
    • 触发事件:在按钮点击事件中,使用 emit('sendData', dataToSend) 发送数据给父组件

App.vue:

<template><div><Header @sendData="handleDataFromChild"></Header><p>Data from child: {{ childData }}</p></div>
</template><script setup>
import Header from './components/Header.vue';
import { ref } from 'vue';const childData = ref('');const handleDataFromChild = (data) => {childData.value = data;
};
</script>

Header.vue:

<template><div><button @click="sendDataToParent">Send Data to Parent</button></div></template><script setup>import { defineEmits } from 'vue';const emit = defineEmits(['sendData']);const sendDataToParent = () => {const dataToSend = 'Data from Header component';emit('sendData', dataToSend);};</script>

http://www.ppmy.cn/ops/165604.html

相关文章

Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主机名

进入目录 /etc/netplan 修改 50-cloud-init.yaml 》保存文件后&#xff0c;执行以下命令应用更改&#xff1a; sudo netplan apply 》》 DHCP模式 修改主机名 hostnamectl set-hostname xxxx 修改cloud.cfg 防止重启主机名还原 但测试下来 不修改&#xff0c; 重启 也不会还…

JAVA中的多线程安全问题及解决方案

一.线程安全的定义 线程安全是指在多线程环境下&#xff0c;对共享资源进行并发访问时&#xff0c;程序能够正确地处理&#xff0c;不会出现数据不一致、逻辑错误等问题&#xff0c;确保程序的执行结果与单线程环境下的执行结果相同&#xff0c;或者符合预期的并发逻辑。 有些代…

Node.js 模块化概念详细介绍

目录 模块化的概念 模块化的好处&#xff1a; 实现模块化 代码实现 1. 创建计算器模块 2. 使用计算器模块 3. 运行结果 总结 常见的Node.js核心模块 模块化的应用场景 Node.js 采用了模块化的设计&#xff0c;使得开发者能够将代码拆分成多个独立的模块&#xff0c;便…

利用java实现数据分析

1 问题 在日常生活中&#xff0c;对于数据的处理&#xff0c;为了使数据更加直观&#xff0c;我们可以使用柱状图&#xff0c;饼图&#xff0c;折线图等来呈现&#xff0c;同时也可以对数据直接进行一些处理&#xff0c;那怎样用java来处理这类问题呢&#xff1f; 2 方法 代码清…

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…

大型语言模型与强化学习的融合:迈向通用人工智能的新范式

1. 引言 大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域的突破&#xff0c;展现了强大的知识存储、推理和生成能力&#xff0c;为人工智能带来了新的可能性。强化学习&#xff08;RL&#xff09;作为一种通过与环境交互学习最优策略的方法&#xff0c;在智能体训…

基于Vue3的流程图绘制库

流程图组件的革命者&#xff0c;带你探索无限可能Vue Flow 基于Vue3的流程图绘制库

传球游戏(蓝桥云课)

题目描述 上体育课的时候&#xff0c;小蛮的老师经常带着同学们一起做游戏。这次&#xff0c;老师带着同学们一起做传球游戏。 游戏规则是这样的&#xff1a;nn 个同学站成一个圆圈&#xff0c;其中的一个同学手里拿着一个球&#xff0c;当老师吹哨子时开始传球&#xff0c;每个…