Vue同级组件间数据传递:$on与$emit方法详解
版权申诉
DOCX格式 | 16KB |
更新于2024-08-20
| 125 浏览量 | 举报
在Vue.js中,组件之间的通信是其灵活性和可扩展性的重要部分。本文档主要关注如何在两个同级组件(children1 和 children2)之间实现数据传递。在Vue应用中,组件间的通信可以通过以下两种主要方式实现:
1. **父组件向子组件传递值**:
- **props** 是一种推荐的方式,用于子组件接收来自父组件的数据。父组件可以通过`<children1 prop="value">`的形式,将自定义属性`prop`绑定到子组件上,然后在子组件的`props`对象中接收这个值。
- 如果需要动态绑定或者复杂的数据结构,可以考虑使用自定义事件`v-on`,但在这个例子中没有提及。
2. **子组件向父组件传递值**:
- 子组件通常通过`@自定义事件='函数'`的形式,监听一个自定义事件并触发它。例如,`<children1 @go="parentFunction">`,当点击按钮时,调用`send`方法,`this.$emit('go', '要发送的内容')`会触发`parentFunction`函数,从而将数据传递给父组件。
3. **两个同级组件之间的通信**:
- 当需要在两个同级组件间进行通信时,不能直接使用父子关系的`props`或`v-on`,因为它们是单向的。在这种情况下,可以创建一个共享的Vue实例(例如`Event`)作为中继,用于传递数据。文档示例中,创建了一个新的Vue实例,通过`Event.$emit('go', data)`在`children1`组件的`send`方法中发送数据,而在`children2`组件的`created`生命周期钩子中监听`Event`实例上的`go`事件,并更新自身的状态。
具体实现如下:
```html
<div id="app">
<children1></children1>
<children2></children2>
</div>
<script>
// 创建一个中继Vue实例
var Event = new Vue({});
// 定义children1组件
var children1 = {
template: `
<div>
<button @click="send">点我给children2组件发送数据</button>
</div>
`,
data() {
return {
msg: '我是要给children2发送的数据'
};
},
methods: {
send() {
Event.$emit('go', this.msg);
}
}
};
// 定义children2组件
var children2 = {
template: `
<div>
<h2>从children1组件接收到的值:{{msg1}}</h2>
</div>
`,
data() {
return {
msg1: ''
};
},
created() {
// 使用箭头函数确保this指向正确
Event.$on('go', (v) => {
this.msg1 = v;
});
}
};
// 主Vue实例
var vm = new Vue({
el: '#app',
components: {
children1,
children2
}
});
```
通过这种方式,`children1`组件的点击事件触发了`Event`实例的`go`事件,进而更新了`children2`组件的状态,实现了两个同级组件之间的数据交互。这种设计模式有助于保持组件的独立性,同时保持应用程序的可维护性和模块化。
相关推荐










mmoo_python
- 粉丝: 1w+
最新资源
- 封装操作项实现统一页面提示框效果
- 单链表类的实现及用户登录系统操作
- 蓝捷电子推出首个国产电脑打碟软件tankDJ
- Asis2综合资源包:文档、代码与配置快速指南
- Web代码示例文件上传方法
- vf课程设计:电影院售票系统功能实现
- RTL8168网卡驱动macOS雪豹版本兼容指南
- C++中float与hex数据互转的实现方法
- 佳能打印机清零软件实用指南
- 动态调整TableView高度的源码分析
- pChart PHP图表库使用教程及示例解析
- FengYun 2.1 主题发布:功能丰富的wp主题及背景
- 基于C#实现的学生信息管理系统详细介绍
- 计算机辅助教学:TCP协议与ARQ滑动窗口的Flash课件资源
- 电信报表系统开发实战:MyEclipse与Tomcat源码解析
- 纯DIV+CSS实现三级菜单教程
- 单向固结差分法程序在岩土沉降计算中的应用
- 深入浅出Performance Monitor:全面监控与管理进程
- 北大青鸟Java课程实践:超市收银管理系统项目案例
- 易语言98款精选皮肤文件免费分享
- 基于Windows API的稳定串口通信类封装
- C#开发的QQ连连看辅助程序源码解析
- 医疗器械管理系统开发与界面优化实践
- C#县长公开电话受理系统源码解析与环境配置