vue保姆级教程----组件之间的参数传递

news2025/4/23 0:35:13

📢 鸿蒙专栏:想学鸿蒙的,冲

📢 C语言专栏:想学C语言的,冲

📢 VUE专栏:想学VUE的,冲这里

📢 CSS专栏:想学CSS的,冲这里

📢 Krpano专栏:想学VUE的,冲这里

🔔 上述专栏,都在不定期持续更新中!!!!!!!!!!!!!

文章目录

✨ 前言

✨ 实用示例

1. props和$emit

🔔 props

🔔 $emit

2. $parent 和 $children

🔔 $parent

🔔 $children

3. Provide/Inject

4. Vuex

✨ 结语


✨ 前言

        随着移动互联网的发展,前端技术也日新月异。如今流行的前端框架层出不穷,从Angular、React到Vue,每个框架都有自己的特色。但是学习任何一种新框架和技术都需要Certain一个过程,那么我们应该如何快速地上手一项新技能呢?

本专栏将以Vue框架为例,分享作者在学习Vue过程中的一些心得与经验。文中将介绍:

  • Vue的基本特性与发展历程
  • 怎样快速学习Vue的基础语法
  • 如何应用Vue开发常见的组件
  • 一些提高Vue开发效率的技巧
  • Vue生态系统中的常用工具及插件

        通过阅读本文,希望可以帮助对Vue感兴趣但还没有实际使用经验的读者,快速地对Vue框架有一个整体的认识,并快速上手Vue进行实际项目的开发。与此同时,也欢迎有Vue使用经验的读者,分享你的学习经验与心得。

让我们开始Vue的学习与探索之旅吧!

✨ 实用示例

在Vue项目中,我们经常需要在组件之间传递数据。组件之间的数据传递主要有以下几种方式:

1. props和$emit

🔔 props

  • 在子组件中使用 props 声明需要从父组件接收的数据:
export default {
  props: ['message'] 
}
  • 子组件在模板中可以像使用 data 一样使用 props 的数据:
<p>{{ message }}</p>
  • 父组件使用 v-bind 向子组件传递 props:
<ChildComponent :message="parentMessage" />
  • props 有一些高级特性,如类型检查、默认值等:
props: {
  message: {
    type: String,
    default: 'default value' 
  }
}

🔔 $emit

  • 子组件中通过 $emit 触发事件来通知父组件:
this.$emit('someEvent', 1, 2, 3)
  • 父组件使用 v-on 监听子组件事件:
<ChildComponent v-on:someEvent="callback" />
  • 回调函数接收子组件传递过来的额外参数:
methods: {
  callback(param1, param2, param3) {
    // ......
  }  
}
  • 除了数据之外,也可以在 $emit 中传递事件对象:
this.$emit('click', e)

这样 props 和 $emit 就实现了父子组件之间的双向数据传递。可以根据需要灵活使用。

2. $parent 和 $children

🔔 $parent

1、在子组件中可以通过this.$parent访问父组件的实例。

2、子组件可以直接调用父组件的数据或方法:

this.$parent.parentData
this.$parent.parentMethod()

3、父组件也可以通过refs访问子组件实例:

<ChildComponent ref="child"/>

this.$refs.child.childData

4、需要注意$parent/$children时组件间的强耦合关系。

5、不要在模板或样式中直接访问$parent/$children。

🔔 $children

1、在父组件中通过this.$children访问子组件实例数组。

2、示例:

this.$children[0].childMethod()

3、常见场景是父组件遍历子组件:

this.$children.forEach(child => {
  // ...
})

4、$children需要注意子组件的顺序和数量变化。

5、也可以通过$refs直接获取子组件。

综上,$parent/$children可以快速访问组件实例,但也会产生强耦合,需谨慎使用。大多数场景还是推荐使用props/events的组件通信方式。

3. Provide/Inject

Provide/Inject API可以实现跨层级的参数传递。

我来对Vue中使用Provide/Inject实现跨组件层级传参的方法做一个更完善的说明:

  1. Provide/Inject API属于Vue的依赖注入系统。
  2. 使用步骤:
  • 祖先组件中提供数据:

    provide: {
      foo: 'foo value' 
    }
  • 子孙组件注入提供的数据:

    inject: ['foo']
  1. Provide的对象会向下合并到所有子孙组件中。
  2. 注入的key需要与Provide的key保持一致。
  3. Provide/Inject不受组件层级关系限制,可以实现跨级传递数据。
  4. 注入的数据是非响应式的。
  5. 常见场景是祖先组件提供共享数据或方法。
  6. 使用好处是减少多级组件传递props的麻烦。
  7. 注意Provide/Inject会使组件间的关系不明显,Maintenance困难。
  8. 推荐仅在有明确需求时才使用,而不是滥用该API。

综上,Provide/Inject可以实现Vue组件深层级的传参,但也有Maintenance上的隐患,需要谨慎使用。大多数场景还是推荐使用props、events等方式实现组件通信。

4. Vuex

Vuex是Vue的状态管理库,可以实现跨组件数据共享。

1、在组件中可以通过this.$store访问到Vuex的store实例。

2、获取state中的数据:

this.$store.state.count

3、调用mutations修改state:

this.$store.commit('increment')

4、调用actions进行异步操作:

this.$store.dispatch('asyncIncrement')

5、mapState/mapMutations/mapActions可以将store映射到计算属性/方法:

computed: mapState(['count']) 

methods: mapMutations(['increment'])

6、组件内getters访问:

this.$store.getters.doneTodos

7、组件间通信- 通过mutations和actions进行事件分发。

8、Vuex适合于将共享状态抽取到store,实现组件间数据交互。

9、注意划分好状态变更的mutations和处理逻辑的actions。

10、使用Vuex需要考虑代码Maintenance成本,是否值得store管理。

综上,Vuex为组件通信提供了一个全局事件总线,可以用来维护和传递共享状态,但也要考虑合理的使用场景。

 

✨ 结语

        经过上述的讲解,我们了解了Vue组件之间的几种常用数据传递方式:props/$emit、$parent/$children、Provide/Inject、Vuex等。Props和events可以实现父子组件的定向传参;Vuex提供了一个全局状态管理;Provide/Inject实现跨层级注入;$parent/$children访问可能造成组件强耦合。

        不同的场景需要选择合适的传递方式。简单的父子组件通信可以使用props/events;复杂的大型应用可以使用Vuex进行状态管理;如果需要跨多层级传递参数,则可以采用Provide/Inject等方式。

        学习一个技术离不开理论指导,但更需要项目实践。建议大家在学习Vue组件间通信理论后,充分运用不同的传参方式,完成一些实际的功能模块。在不断的实践中思考不同方式的优劣,才能深入地掌握Vue组件间的交互模式。

        本文内容仅涵盖了Vue组件通信的基础用法,相关技术还在不断发展中。希望这篇文章能作为一个入门指引,帮助大家快速上手Vue组件间的参数传递。让我们持续地学习与实践,在开发中不断优化和提高。

我们改日再会

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

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

相关文章

4.33 构建onnx结构模型-Expand

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Expand 结点进行分析 方式 方法一…

【算法】哈希算法和哈希表

一、哈希算法 哈希算法是一种将任意长度的数据&#xff08;也称为“消息”&#xff09;转换为固定长度字符串&#xff08;也称为“哈希值”或简称“哈希”&#xff09;的数学函数或算法。这个固定长度的字符串是由输入数据通过一系列的运算得到的&#xff0c;并且具有一些重要…

FileZilla的使用以及主动模式跟被动模式

目录 FileZilla的安装 下载路径 安装 FileZilla的基本使用 添加组 添加用户 设置权限 测试 开始测试 FileZilla的主动模式及被动模式 主动模式&#xff08;Active Mode&#xff09; 被动模式&#xff08;Passive Mode&#xff09; 思维导图 ​编辑 FileZilla的安装 下载…

高频面试题:合并两个List并去重

欢迎关注微信公众号&#xff1a;互联网全栈架构 合并两个List中并去掉重复的元素&#xff0c;有好几种方法&#xff0c;我们来看看常见的三种&#xff1a; 一、使用HashSet HashSet是一个没有重复元素的集合&#xff0c;可以利用这个特性&#xff0c;把List中的元素逐一添加到H…

数据结构【线性表篇】(一)

数据结构【线性表篇】(一&#xff09; 文章目录 数据结构【线性表篇】(一&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、顺序表(一)、顺序表的定义(二)、顺序表的插入删除(三)、顺序表的查找 二、完整代码(一)、顺序表的…

C语言-第十七周做题总结-数组2

id&#xff1a;464 A.求矩阵各行元素之和 题目描述 本题要求编写程序&#xff0c;求一个给定的mn矩阵各行元素之和。 输入 输入第一行给出两个正整数m和n&#xff08;1≤m, n≤6&#xff09;。随后m行&#xff0c;每行给出n个整数&#xff0c;其间以空格分隔。 输出 每行…

元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!

哇塞&#xff0c;元旦假期终于来啦&#xff01;&#x1f389;在这个喜庆的时刻&#xff0c;电影院也热闹非凡&#xff0c;据猫眼专业版数据显示&#xff0c;截至12月30日&#xff0c;2023年元旦档首日票房竟然超过了4.69亿&#xff01;这简直是个天文数字啊&#xff01;&#x…

【GOLANG】使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置

直接 使用插件 Goanno 的方式来对方法、接口、结构体注释模板配置 1、简单安装 Goanno 插件 File->Settings->Plugins , 搜索 Goanno Normal Method 配置内容如下&#xff1a; // Title ${function_name} // Description ${todo} // Author mumu ${date} ${time} // Par…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时&#xff0c;是为了去除飞机后面变透明&#xff0c;当时当飞机到达边界的时候&#xff0c;会出现异常退出&#xff0c;这是因为drawAlpha函数不稳定&#xff0c;昨天试过制作掩码图&#xff0c;下载了一个ps,改的话&#xff0c…

黑马程序员SSM框架-SpringBoot

SpringBoot简介 入门程序 也可以基于官网创建项目。 SpringBoot项目快速启动 下面的插件将项目运行所需的依赖jar包全部加入到了最终运行的jar包中&#xff0c;并将入口程序指定。 SpringBoot概述 基础配置 配置文件格式 自动提示消失解决方案。将新建的配置文件加入到配置文…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的固定帧率&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在NEOAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过NEOAPI SDK设置相机固定…

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样&#xff0c;因此一个好的习惯就是不同的工程都创建属于自己的环境&#xff0c;在anaconda中默认的环境是base&#xff1a; //括号中名字&#xff0c;代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

Python 编辑器pycharm下载与安装

使用python语言编程&#xff0c;可以使用pycharm或者sublime等编辑器。 我这里选择pycharm编辑器。 1、下载 登录官网&#xff1a;JetBrains: Essential tools for software developers and teams 点击【Developer Tools】菜单按钮&#xff0c;可以直接找到pycharm&#xff…

高斯泼溅的全面概述

一、说明 高斯泼溅是一种用于表示 3D 场景和渲染新颖视图的方法&#xff0c;在“实时辐射场渲染的 3D 高斯泼溅”中引入。它可以被认为是 NeRF 类模型的替代品&#xff0c;就像当年的 NeRF 一样&#xff0c;高斯分布导致了许多新的研究工作&#xff0c;这些工作选择将其用作各种…

鸿蒙 Window 环境的搭建

鸿蒙操作系统是国内自研的新一代的智能终端操作系统&#xff0c;支持多种终端设备部署&#xff0c;能够适配不同类别的硬件资源和功能需求。是一款面向万物互联的全场景分布式操作系统。 下载、安装与配置 DevEco Studio支持Windows系统和macOS系统 Windows系统配置华为官方推…

Markdown之YAML效果图语法介绍(二十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

C#进阶-IIS应用程序池崩溃的解决方案

IIS是微软开发的Web服务器软件&#xff0c;被广泛用于Windows平台上的网站托管。在使用IIS过程中&#xff0c;可能会遇到应用程序池崩溃的问题&#xff0c;原因可能有很多&#xff0c;包括代码错误、资源不足、进程冲突等。本文将为大家介绍IIS应用程序池崩溃的问题分析和解决方…

缓存cache和缓冲buffer的区别

近期被这两个词汇困扰了&#xff0c;感觉有本质的区别&#xff0c;搜了一些资料&#xff0c;整理如下 计算机内部的几个部分图如下 缓存&#xff08;cache&#xff09; https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存&#xff08;cache&#xff09;&#xff0c;就…

【web安全】验证码识别-burp的captcha-killer-modified插件教程(基于百度接口)(总结一些坑)

前言 菜某分享 captcha-killer-modified插件的安装教程 整体安装教程可以看他的 安装captcha-killer-modified插件&#xff08;windospython环境&#xff09;_aptcha-killer-modified的安装-CSDN博客 但是有一点补充。 这个里面的codereg.py文件有个问题 可能是版本的问…

千里马2023年终总结-android framework实战

背景&#xff1a; hi粉丝朋友们&#xff1a; 2023年马上就过去了&#xff0c;很多学员朋友也都希望马哥这边写个年终总结&#xff0c;因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发&#xff0c;差点都忘记了这个事情了&#xff0c;今天特别花时间来写个bl…