Vue学习:16.组件通信
组件通信就是指组件之间的数据传递。由于组件的数据是独立的,无法直接访问其他组件的数据,所以想要使用其他组件数据必须通过 组件通信!
在Vue.js中,组件之间的通信可以通过多种方式实现,包括 props、事件、$emit / $on、Vuex 状态管理等。
要讲组件通信首先来说一下组件关系。
组件关系
在Vue.js中,组件之间的关系可以分为父子关系、兄弟关系和祖先后代关系。
如图所示,A与B、C便是父子关系;B和C便是兄弟关系;A和D事祖先后代关系。
其实可以更为简略的划分为:父子关系、非父子关系。
组件通信分类
而根据组件之间的关系,可以将组件通信分类为以下几种:
1. 父子组件通信
- Props / $emit: 父组件通过 props 向子组件传递数据,子组件通过 $emit 触发事件,向父组件传递数据。
- $refs: 父组件可以通过 ref 属性引用子组件的实例,直接调用子组件的方法或访问子组件的数据。
2. 兄弟组件通信
- 事件总线(Event Bus): 通过一个空的 Vue 实例作为中央事件总线,兄弟组件通过该实例进行事件的触发和监听。
- Vuex: 使用 Vuex 进行状态管理,兄弟组件共享状态。
3. 祖先后代组件通信
- provide / inject: 祖先组件通过 provide 提供数据或方法,后代组件通过 inject 注入数据或方法,实现祖先后代之间的通信。
4. 非直接关系组件通信
有时候,组件之间的关系并不是直接的父子、兄弟或祖先后代关系,但它们仍然需要进行通信。
- 事件总线(Event Bus): 同样可以用于非直接关系组件之间的通信。
- Vuex: Vuex 可以管理全局状态,任何组件都可以通过 Vuex 进行状态的读取和修改。
5. 动态组件通信
当使用动态组件时,例如通过 component
元素动态渲染不同的组件,它们之间的通信方式可以根据具体情况选择以上提到的通信方式。
实例:父传子、子传父
实现功能
实现父组件向子组件传递数据以及让子组件将数据传递回父组件。
思路
代码
父传子
父组件通过给子组件以添加属性的方式传值,例子中【:message="parentMessage"
】将父组件的数据传递给了子组件。子组件内部通过声明props: ['message']
来接收父组件传递过来的数据,并在模板中使用{{ message }}
来显示这个数据。
<!-- ParentComponent.vue -->
<template>
<div>
<ChildComponent :message="parentMessage" />
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
data() {
return {
parentMessage: 'Hello from parent'
}
}
}
</script>
<!-- ChildComponent.vue -->
<template>
<div>
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
props: ['message']
}
</script>
子传父
子组件向父组件传递数据通常通过触发事件来实现。子组件可以使用 $emit
方法触发一个自定义事件,并将需要传递的数据作为参数传递给父组件。父组件可以监听这个自定义事件,并在事件处理函数中获取子组件传递过来的数据。
<!-- ChildComponent.vue -->
<template>
<button @click="sendMessageToParent">Send Message to Parent</button>
</template>
<script>
export default {
methods: {
sendMessageToParent() {
// 触发自定义事件,并传递数据给父组件
this.$emit('messageToParent', 'Hello from child');
}
}
}
</script>
<!-- ParentComponent.vue -->
<template>
<div>
<ChildComponent @messageToParent="receiveMessageFromChild" />
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
methods: {
receiveMessageFromChild(message) {
// 在这里处理从子组件传递过来的数据
console.log(message); // 输出: "Hello from child"
}
}
}
</script>
Vue学习:16.组件通信的更多相关文章
- 浅谈vue学习之组件通信
vue用组件化简化了我们编写代码的复杂度,组件之间经常会出现数据传递的情况,那么组件之间是怎样通信的呢? 使用props传递数据 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内 ...
- Vue学习笔记-组件通信-子传父(自定义事件)
props用于父组件向子组件传递数据,还有一种比较常见的是子组件传递数据或事件到父组件中.我们应该如何处理呢?这个时候,我们需要使用自定义事件来完成.什么时候需要自定义事件呢?当子组件需要向父组件传递 ...
- Vue学习笔记-组件通信-父传子(props中的驼峰标识)
在组件中,使用选项props来声明需要从父级接收到的数据.props的值有两种方式:方式一:字符串数组,数组中的字符串就是传递时的名称.方式二:对象,对象可以设置传递时的类型,也可以设置默认值等. & ...
- Vue 非父子组件通信方案
Vue 非父子组件通信方案 概述 在 Vue 中模块间的通信很普遍 如果是单纯的父子组件间传递信息,父组件可以使用 props 将数据向下传递到子组件,而在子组件中可以使用 events (父组件需要 ...
- Vue的父子组件通信(转载)
Vue是一个轻量级的渐进式框架,对于它的一些特性和优点在此就不做赘述,本篇文章主要来探讨一下Vue子父组件通信的问题 首先我们先搭好开发环境,我们首先得装好git和npm这两个工具(如果有不清楚的同学 ...
- Vue 非父子组件通信
组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求.组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信.前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有 ...
- vue子父组件通信
之前在用vue写子父组件通信的时候,老是遇到问题!!! 子组件传值给父组件: 子组件:通过emit方法给父组件传值,这里的upparent是父组件要定义的方法 模板: <div v-on:cli ...
- vue学习之组件
组件从注册方式分为全局组件和局部组件. 从功能类型又可以分为偏视图表现的(presentational)和偏逻辑的(动态生成dom),推荐在前者中使用模板,在后者中使用 JSX 或渲染函数动态生成组件 ...
- vue学习之四组件系统
vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 一.Vue.js组件系统 每一个 ...
- vue 中的组件通信
vue中组件通信,一般分为三种情况,父与子,子与父,子子之间. 一.父与子通信 父组件将值传给子组件,一般通过props,设置默认的类型.调用的时候通过 xx=" ", 或者:XX ...
随机推荐
- 解析 RocketMQ 业务消息--“顺序消息”
简介: 本篇将继续业务消息集成的场景,从功能原理.应用案例.最佳实践以及实战等角度介绍 RocketMQ 的顺序消息功能. 作者:绍舒 引言 Apache RocketMQ 诞生至今,历经十余年大 ...
- 基于 Observable 构建前端防腐策略
简介:To B 业务的生命周期与迭代通常会持续多年,随着产品的迭代与演进,以接口调用为核心的前后端关系会变得非常复杂.在多年迭代后,接口的任何一处修改都可能给产品带来难以预计的问题.在这种情况下,构 ...
- 冷热分离之OTS表格存储实战
简介: 为什么要冷热分离由于2020疫情的原因,在线教育行业提前被大家所重视,钉钉教育已经服务超过21万所学校.700万教师和1.4亿学生用户,每天大量的教育数据产生.整体数据量:随着时间的积累,数据 ...
- 2019-11-29-WPF-Process.Start-出现-Win32Exception-异常
title author date CreateTime categories WPF Process.Start 出现 Win32Exception 异常 lindexi 2019-11-29 10 ...
- 一键关闭 Win11 系统广告「GitHub 热点速览」
不知道读者中有多少人早已对 Windows 11 系统自带的广告感到厌烦,却又不知道如何关闭它们? 虽然网上有详细的关闭教程,但是都需要逐一手动操作,不是很方便.所以,今天「GitHub 热点速览」给 ...
- NSThread的start方法内部做了什么?
下面是NSThread start方法的汇编码: 1 1 1 ;Foundation`-[NSThread start]: 2 2 2 -> 0x7fff2594f47f <+0>: ...
- CompletableFuture学习总结
CompletableFuture 简介 在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通 ...
- Js使用面向对象和面向过程的方法实现拖拽物体的效果
1.面向过程的拖拽实现代码: <!DOCTYPE html> <html> <head> <title>drag Div</title> & ...
- 如何去掉WordPress分类目录url链接中的category,如何处理生成的作者链接
一个新网站需要结合SEO,才能做成一个优秀的网站, ◆◆◆ 关于WordPress的分类目录url中含有category的处理办法: 1,如果是新网站这些设置需要提前做,方便以后做SEO 1.修改固定 ...
- C 语言编程 — 逻辑控制语句
目录 文章目录 目录 前文列表 结构化程序设计 条件分支语句 if/else 语句 if 语句 if/else 语句 if/else-if/else 语句 嵌套 if 语句 switch 语句 swi ...