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

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

📢 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组件间的参数传递。让我们持续地学习与实践,在开发中不断优化和提高。

我们改日再会

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT 输入框输入限制 正则表达式限制 整理

在使用 输入数值时&#xff0c;经常遇到限制其范围的需要&#xff0c;比如角太阳高度角范围为[-90,90]&#xff0c;经度值范围[-180,180]&#xff0c;方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围&#xff0c;如使用QIntValidator限制整数…

RK3568测试tdd

RK3568测试tdd 一、门禁取包二、烧录三、跑tdd用例四、查看结果参考资料 一、门禁取包 右键复制链接&#xff0c;粘贴下载&#xff1b;解压到文件夹&#xff1b; 二、烧录 双击\windows\RKDevTool.exe打开烧写工具&#xff0c;工具界面击烧写步骤如图所示&#xff1a; 推荐…

单片机的存储、堆栈与程序执行方式

一、单片机存储区域 如图所示位STM32F103ZET6的参数&#xff1a; 单片机的ROM&#xff08;内部FLASH&#xff09;&#xff1a;512KB&#xff0c;用来存放程序代码的空间。 单片机的RAM&#xff1a;64KB&#xff0c;一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

中间人攻击是什么,会产生哪些危害,如何有效防止中间人攻击

简介 中间人攻击&#xff08;Man-in-the-Middle Attack&#xff0c;简称MITM攻击&#xff09;是一种网络攻击&#xff0c;其原理是攻击者通过各种技术手段将受攻击者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间&#xff0c;这台计算机称为“中间人”。在攻击过…

关于HTTPS

目录 什么是加密 对称加密 非对称加密 中间人攻击 引入证书 HTTPS是一个应用层的协议,是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输,这就导致在传输的过程中出现一些被篡改的情况. 运营商劫持事件 未被劫持的效果,点击下载按钮,就会…

Spring Cloud Gateway 常见过滤器的基本使用

目录 1. 过滤器的作用 2. Spring Cloud Gateway 过滤器的类型 2.1 内置过滤器 2.1.1 AddResponseHeader 2.1.2 AddRequestHeader 2.1.3 PrefixPath 2.1.4 RequestRateLimiter 2.1.5 Retry 2.2 自定义过滤器 1. 过滤器的作用 过滤器通常用于拦截、处理或修改数据流和事…

Redis 快速搭建与使用

文章目录 1. Redis 特性1.1 多种数据类型支持1.2 功能完善1.3 高性能1.4 广泛的编程语言支持1.5 使用简单1.6 活跃性高/版本迭代快1.7 I/O 多路复用模型 2. Redis发展历程3. Redis 安装3.1 源码安装3.1.1 下载源码包3.1.2 解压安装包3.1.3 切换到 Redis 目录3.1.4 编译安装 3.2…

slf4j+logback源码加载流程解析

Logger log LoggerFactory.getLogger(LogbackDemo.class);如上述代码所示&#xff0c;在项目中通常会这样创建一个Logger对象去打印日志。 然后点进去&#xff0c;会走到LoggerFactory的getILoggerFactory方法&#xff0c;如下代码所示。 public static ILoggerFactory getILo…

缓存cache和缓冲buffer的区别

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

<PDF-Pics> support

If get any questions,email me caohechunhotmail.com

Channel 使用事项和注意细节

&#xff08;1&#xff09;channel 可以声明为只读&#xff0c;或者只写性质 &#xff08;2&#xff09;channel 只读和只写的最佳实践案例 在默认情况下&#xff0c;管道是双向管道&#xff0c;即可读可写。 var ch chan intfunc main() {//声明为只写管道var chan1 chan<…

系统编程--常用命令

这里写目录标题 常用命令tab补齐获取历史命令快捷键相对路径和绝对路径ls补充详细区分文件对自己自身列-l递归ls which命令 系统目录介绍内容补充上一级目录运行一个可执行文件&#xff08;运行一个程序&#xff09; 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录…

linux基于用户身份对资源访问进行控制的解析及过程

linux中用户分为三类 1.超级用户&#xff08;root&#xff09; 拥有至高无上的权限 2.普通用户 人为创建、权限小&#xff0c;权限受到控制 3.程序用户 运行程序的用户&#xff0c;不是给人使用的&#xff0c;给程序使用的&#xff0c;一般不给登录&#xff01; 组账…

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本功能其实就两个:显示画面和播放声音。在实现这两个功能前&#xff0c;我们需要先用ffmpeg连接到rtmp服…

解决IDEA 不能正确识别系统环境变量的问题

问题描述 本人laptop 上的是设置了GOOGLE_APPLICATION_CREDENTIALS 这个环境变量的&#xff0c; 正常java or python 的程序能基于这个环境变量使用 某个gcp service account 去访问GCP的资源 [gatemanmanjaro-x13 ~]$ env | grep -i google GOOGLE_APPLICATION_CREDENTIALS/…

ubuntu 安装apisix -亲测可用

官方未提供在ubuntu系统中安装apisix的方式&#xff0c;似乎只能通过源码方式安装&#xff0c;但是并不推荐&#xff0c;非常容易失败&#xff0c; 具体操作方式如下&#xff1a; ubuntu和Debian其实类似的&#xff0c;可使用DEB方式安装&#xff0c;如下截图 注意&#xff1…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part2

TOP11&#xff1a;PCIe在狂飙&#xff0c;SAS存储之路还有多远&#xff1f; 随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已经成为现代计算机系统中不可或缺的一部分。它以其出色的性能和可靠性&#xff0c;改变了我们对于存储设备的期待。当前业内SSD广…

通用定时器PWM波输出原理

1通用PWM波输出原理 总结&#xff1a;PWM波周期或频率由ARR决定&#xff0c;PWM波占空比由CCRx决定 1通用PWM模式 1.1PWM模式1 PWM模式1&#xff1a; 递增&#xff1a;CNT < CCRx&#xff0c;输出有效电平1 CNT > CCRx&#xff0c;输出无效电平0 递减&#xff1a;CNT …

Python面向对象编程 —— 类和异常处理

​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 1. 类 1.1 类的定义 1.2 类变量和实例变量 1.3 类的继承 2. 异常处理 2.1类型异常 2.…

fiddler菜单汉化补丁

【Fiddler汉化补丁下载地址】 一、手机应用市场下载“头条搜索极速版”app 二、头条搜索极速版中搜索“葫芦娃指南”获取 三、汉化过程完整过程 1、安装Fiddler英文版 2、比如我将Fiddler安装在&#xff1a;D:\Programs\Fiddler 3、将【fiddler汉化】文件夹中的FiddlerT…