【Vue基础】Vue在组件数据传递详解

news2024/12/23 20:44:30

Vue核心基础-CSDN博客

先回顾Vue特性:

Vue.js 是一个用于构建用户界面的渐进式框架,具有许多强大的特性。以下是一些主要的 Vue 特性:

  1. 响应式数据Vue 使用双向绑定来实现数据的响应式更新。当数据发生变化时,视图会自动更新。

  2. 组件化:Vue 允许将页面拆分为多个组件,每个组件都可以封装自己的 HTML、CSS 和 JavaScript,从而实现更高效、可维护和可重用的代码。

  3. 模板语法:Vue 提供了简洁灵活的模板语法,可以直接在 HTML 中绑定数据、显示条件、循环列表等,使得编写模板更加简单和直观。

  4. 指令:Vue 提供了一系列内置的指令,如v-bind、v-if、v-for、v-on 等,用于在模板中添加特定的行为或响应事件。

  5. 计算属性和侦听器:Vue 允许使用计算属性和侦听器来处理复杂的逻辑和异步操作,保持模板的简洁性。

  6. 生命周期钩子:Vue 组件具有一系列生命周期钩子函数,可以在组件的不同阶段执行特定的操作,如created、mounted、updated、destroyed 等。

  7. 路由:Vue 提供了 Vue Router 来实现客户端路由,允许构建单页应用并实现页面间的导航。

  8. 状态管理:Vue 提供了 Vuex 库来管理应用的状态,用于在组件之间共享数据和状态,以及实现数据的响应式更新。

  9. 过渡和动画:Vue 提供了过渡和动画的支持,可以通过内置的transition组件来实现页面元素的平滑过渡和动画效果。

  10. 插件系统:Vue 具有灵活的插件系统,允许开发者扩展 Vue 的功能或集成第三方库。

这些特性使得 Vue.js 成为一个功能强大、灵活易用的前端框架,适用于构建各种规模的 Web 应用程序。

 分析上述特性,可知近一半都是围绕数据进行首先,最显著的特性就是响应式数据(数据改变视图自动改变),其次,状态管理(说白了就是数据管理,获取修改数据,‘状态’这个词让笔者联想到‘状态机’,在Promise当中也是用到状态改变[pending->fufilled/rejected]),再者计算属性和监听器也是对数据进行获取、监听和修改等操作,最后像模板语法、指令是vue在js基础上且为了要实现响应式数据而制定的标准语法

Vue中组通讯

在Vue中,组件之间的数据传递可以通过props、事件、Vuex、$emit和$refs等方式实现。以下是这些方式的简要说明:

  1. Props(属性):父组件通过props向子组件传递数据。子组件可以通过props属性接收父组件传递的数据。

  2. 事件:子组件通过$emit方法触发事件,并向父组件传递数据。父组件可以在子组件上使用v-on指令监听子组件触发的事件,并在相应的方法中处理数据。

  3. Vuex:Vuex是Vue的状态管理库,用于在多个组件之间共享数据。通过Vuex的store,不同组件可以访问和修改共享的数据。

  4. $emit:除了用于触发事件,$emit还可以直接向父组件传递数据。子组件通过$emit方法触发一个自定义事件,并将数据作为参数传递给父组件。

  5. $refs:$refs可以用来获取子组件的实例,从而调用子组件的方法或访问其数据。

这些方法可以单独或组合使用,根据具体的需求和场景选择合适的方式进行组件间数据传递。

 案例:

<!-- ParentComponent.vue -->
<template>
  <div>
    <ChildComponent :prop1="parentData" @customEvent="handleCustomEvent" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent,
  },
  data() {
    return {
      parentData: 'Data from parent component',
      receivedData: '',
    };
  },
  methods: {
    handleCustomEvent(data) {
      this.receivedData = data;
    },
  },
};
</script>


---------------------------------------------------------------------
<!-- ChildComponent.vue -->
<template>
  <div>
    <p>Received prop from parent: {{ prop1 }}</p>
    <button @click="sendDataToParent">Send Data to Parent</button>
  </div>
</template>

<script>
export default {
  props: ['prop1'],
  methods: {
    sendDataToParent() {
      this.$emit('customEvent', 'Data from child component');
    },
  },
};
</script>

这个例子中,展示了以下几种 Vue 组件数据传递的方式:

  1. Props(属性):父组件通过props向子组件传递数据,在子组件中通过props属性接收。

  2. 事件(Event):子组件通过$emit方法触发一个自定义事件,并传递数据给父组件,父组件通过在子组件上监听这个事件来接收数据。

  3. 自定义事件(Custom Event):父组件在子组件上绑定一个自定义事件,子组件通过this.$emit触发这个事件,并传递数据给父组件,父组件通过在模板中使用@customEvent监听这个事件来接收数据。

这些方式可以根据具体的需求选择使用,用于实现父子组件之间的数据传递和通信。

父子之间数据传递

  • 父->子,props
  • 子-》父 ,$emit

 Vue.js提供了多种方式来实现组件之间的通信。除了父子组件之间的通信,还有兄弟组件、跨级组件的通信等。你可以学习使用props和$emit实现父子组件之间的数据传递和事件触发,使用Vuex进行状态管理,或者使用事件总线(Event Bus)进行组件之间的通信。

eventBus:

// event-bus.js

import Vue from 'vue';

// 创建一个新的 Vue 实例作为事件总线
const EventBus = new Vue();

export default EventBus;


--------------------------------------

//在需要进行组件间通信的地方,你可以导入 event-bus.js 文件,并使用它来发送和接收事件:

// ComponentA.vue

import EventBus from './event-bus';

export default {
  methods: {
    sendDataToComponentB(data) {
      EventBus.$emit('customEvent', data);
    },
  },
};


--------------------------------------------------------------------------

// ComponentB.vue

import EventBus from './event-bus';

export default {
  created() {
    // 在组件创建时监听事件
    EventBus.$on('customEvent', this.handleCustomEvent);
  },
  methods: {
    handleCustomEvent(data) {
      console.log('Received data from ComponentA:', data);
    },
  },
};


这个示例中,event-bus.js 文件创建了一个全局的 EventBus 实例,可以在任何地方导入并使用它来进行事件的发送和接收。在 ComponentA.vue 组件中,通过 EventBus.$emit 方法发送一个自定义事件,并传递数据给 ComponentB.vue 组件。而在 ComponentB.vue 组件中,通过 EventBus.$on 方法监听这个自定义事件,并在触发时执行相应的处理函数。 

总结:定义eventBus = new Vue(),即为一个Vue实例。子组件都引用eventbus,其中一个eventBus.$emit('add',1).另外一个子组件 eventBus.on('add',(num)=>{})

Vuex插件:VueX详解_组合式vuex-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM一些适合小白的入门项目和视频

AIX 大模型专区学习&#xff08;史上最丰富&#x1f973;&#xff09; https://github.com/stay-leave/enhance_llm 图谱大哥五一写得。 【对于卷积神经网络&#xff0c;硕士博士不需要搞明白原理&#xff0c;只要会应用是这样吗&#xff1f;-pytorch/深度学习/神经网络】 htt…

draw.io 网页版二次开发(3):打包和部署(war包)

目录 一 说明 二 环境配置 1. 下载并安装 Apache Ant 2. 下载并安装JDK和JRE 3. 下载tomcat 4. Ant、JDK和JRE 环境变量的配置 三 draw.io打包 四 部署 五 最后 一 说明 应公司项目要求&#xff0c;需要对draw.io进行二次开发&#xff0c;并将html界面通过iframe 嵌…

超详细的胎教级Stable Diffusion使用教程(四)

这套课程分为五节课&#xff0c;会系统性的介绍sd的全部功能和实操案例&#xff0c;让你打下坚实牢靠的基础 一、为什么要学Stable Diffusion&#xff0c;它究竟有多强大&#xff1f; 二、三分钟教你装好Stable Diffusion 三、小白快速上手Stable Diffusion 四、Stable dif…

stm32_RTC_2_HAL——stm32CudeMX

介绍 RTC&#xff08;实时时钟&#xff09;不仅仅提供计数功能&#xff0c;它是一个完整的时钟和日历模块&#xff0c;用于提供日期和时间信息。RTC 能够提供年、月、日、星期、时、分、秒等时间信息&#xff0c;并且通常具有闹钟功能&#xff0c;可以用于定时唤醒或触发事件。…

淘宝购物新玩法,用API接口解读商品评价

淘宝作为中国最大的网络购物平台之一&#xff0c;拥有海量的商品和众多的消费者评价。传统的购物方式往往需要花费大量的时间和精力筛选信誉度高的商品和有用的评价&#xff0c;而如今&#xff0c;联讯数据通过API接口&#xff0c;你可以更轻松地解读商品评价&#xff0c;挖掘出…

设施农业(大棚种植)远程监控系统设计 STM32+51单片机 含pcb 上下位机源码 原理图

目录 摘要 1. 引言 2. 系统方案 3. 系统硬件设计 4. 系统软件设计 5. 系统创新 6. 评测与结论 7、实物图 8、原理图 ​9、程序 10、资料内容 资料下载地址&#xff1a;设施农业(大棚种植)远程监控系统设计 STM3251单片机 含pcb 上下位机源码 原理图 论文 摘要 …

如何根据招聘信息打造完美简历

如何根据招聘信息打造完美简历 招聘信息分析简历调整策略个性化与关键词结语 在求职过程中&#xff0c;简历是第一块敲门砖。它不仅展示了你的专业技能和工作经验&#xff0c;还体现了你对所申请职位的理解和热情。然而&#xff0c;如何从招聘信息中提炼关键点&#xff0c;打造…

halcon 2D模板匹配 3D

一、概述 模板匹配常用于定位和查找&#xff0c;有很多的方式&#xff0c;halcon 中就有灰度匹配 、形状匹配、变形匹配、缩放匹配等&#xff0c;其实最常用的还是两种第一个就是灰度匹配、还有就是形状匹配 二、金字塔概述 网上有很多关于金字塔的解释&#xff0c;我这里直…

OpenHarmony 实战开发——轻量带屏解决方案之恒玄芯片移植案例

本文章基于恒玄科技BES2600W芯片的欧智通 Multi-modal V200Z-R开发板 &#xff0c;进行轻量带屏开发板的标准移植&#xff0c;开发了智能开关面板样例&#xff0c;同时实现了ace_engine_lite、arkui_ui_lite、aafwk_lite、appexecfwk_lite、HDF等部件基于OpenHarmony LiteOS-M内…

基于PSO粒子群优化的PV光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 粒子群优化算法基础 4.2 PV系统及其最大功率点跟踪 4.3 PSO在PV MPPT中的应用 5.完整工程文件 1.课题概述 基于PSO粒子群优化的PV光伏发电系统simulink建模与仿真。通过PSO粒子群优化进行最大功率…

C++之QT文本处理QDir、QFileDialog、QStringList、QFile

一、相应的头文件 #include <QFileDialog> #include <QDir> #include <QStringList> 二、简介 1.QFileDialog 实际效果如下&#xff1a;比如需要选择打开的文件夹或者文件名&#xff0c;通过调用资源管理器的方式进行可视化操作。 代码示例为&#xff1a…

[算法][数组][leetcode]2391. 收集垃圾的最少总时间

题目地址: https://leetcode.cn/problems/minimum-amount-of-time-to-collect-garbage/description/ 题解&#xff1a; class Solution {public int garbageCollection(String[] garbage, int[] travel) {int ans 0;//先计算收所有的垃圾需要多少时间for(String s :garbage){…

【C语言题解】输入n(1~9),再输入n个长度不超过50的字符串,给这n个字符串排序并输出它们

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f308;感谢大家的阅读、点赞、收藏和关注 解题思路&#xff1a; 首先&#xff1a;使用一个二维字符数组来存储输入的字符串。由于n的范围是1到9&#xff0c;我们可以直接定义一…

俄罗斯方块的代码实现

文章目录 首先是头文件的引入部分接下来是一些预处理指令接下来定义了两个结构体&#xff1a;接下来是全局变量g_hConsoleOutput&#xff0c;用于存储控制台输出句柄。之后是一系列函数的声明最后是main函数源码 首先是头文件的引入部分 包括stdio.h、string.h、stdlib.h、tim…

vue2中npm i报错gyp info it worked if it ends with ok

当我拿到一个老的vue2项目&#xff0c;怎么也起不起来&#xff0c;后来找到报错原因&#xff0c;如上图所示&#xff0c;可以看到报错的path是node-sass&#xff0c;那么就猜想应该是sass版本和node版本不匹配。 于是我查看了我的node版本是16 而sass版本是下图所示&#xff0c…

el-select下拉框 添加 el-checkbox 多选框,支持全选、取消全选

el-select下拉框 添加 el-checkbox 多选框&#xff0c;支持全选、取消全选 前言一、实现思路二、实现代码1.模板代码2. css 样式3.js 代码 DEMO 演示总结 前言 实现效果预览 提示&#xff1a;本内容基于element-ui 组件实现&#xff0c;如果使用其他组件库、可参考下面实现方…

SEO之为什么研究关键词(一)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 新手上云 初做网站的人很容易犯的最大错误之一是&#xff0c;脑袋一拍就贸然进入某个领域&#xff0c;跳过竞争研究&#xff0c;没规划好目标关键词就开始做网站。这样做…

Linux的基础IO:软硬连接 动态库 静态库

目录 软硬连接 硬链接的作用 静态库 制作静态库 安装自定义静态库 动态库 制作动态库 协助OS查找动态库的五种方法 总结 动态库加载 软硬连接 创建硬链接指令&#xff1a;ln 目标文件 链接者 创建软链接指令&#xff1a;ln -s 目标文件 链接者 删除链接指令&…

韩顺平0基础学Java——第9天

p169-201 数组&#xff08;第六章&#xff09; 数组扩容 此时原来的数组arr被销毁。 牛蛙&#xff1a; 最后再加一句 SYstem。out。println&#xff08;“是否添加&#xff1f;”&#xff09;&#xff1b; char key myscanner。netx&#xff08;&#xff09;。charAT&…

未授权访问:JBoss未授权访问漏洞

目录 1、漏洞原理  2、环境搭建 3、未授权访问 4、利用jboss.deployment getshell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬…