Vue非父子组件通信详解
发布时间 - 2026-01-11 01:50:39 点击率:次组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求。组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信。前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有下面的几句
具体如何去实现却没有很详细的说明,于是自己试着进行了实现。先看下简单的通信效果:
就是点击了一个组件,另一个组件的数字递加。
html如下:
<div id="app"> <component-a></component-a> <component-b></component-b> </div>
再来看一下如何实现每一个组件:
var bus = new Vue() //首先建立一个空的Vue实例作为事件的中转
Vue.component('component-a',{
template: `<div><button @click="incrementB">{{masgA}}</button></div>`, //添加点击事件incrementB ,因为点击A需要增加B
data () {
return {
masgA : 0
}
},
methods: {
incrementB: function () { //增加B的事件
bus.$emit('incrementB') //中转站bus 触发incrementB事件
}
},
mounted: function () {
var _this = this
bus.$on('incrementA',function(){ //中转站bus自定义increamentA事件用来增加msgA,这个事件最终由组件B进行触发
_this.masgA ++
})
//bus.$on('incrementA',()=>{ //这里也可以用箭头函数,就不会有_this这个变量了,因为箭头函数不会改变this指向
// this.masgA ++
//})
}
})
从上面的代码可以看出真正的改变方法是通过bus里注册监听事件来实现的,同理代component-b也是一样
Vue.component('component-b',{
template: `<div><button @click="incrementA">{{masgB}}</button></div>`,
data () {
return {
masgB : 0
}
},
methods: {
incrementA: function () {
bus.$emit('incrementA')
}
},
mounted: function(){
bus.$on('incrementB',() => {
this.masgB ++
})
}
})
完整代码如下,可直接复制运行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>非父子组件通信</title>
</head>
<body>
<div id="app">
<component-a></component-a>
<component-b></component-b>
</div>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
</body>
<script>
var bus = new Vue() //首先建立一个空的Vue实例作为事件的中转
Vue.component('component-a',{
template: `<div><button @click="incrementB">{{masgA}}</button></div>`, //添加点击事件
data () {
return {
masgA : 0
}
},
methods: {
incrementB: function () {
bus.$emit('incrementB')
}
},
mounted: function () {
var _this = this
bus.$on('incrementA',function(){
_this.masgA ++
})
bus.$on('incrementA',()=>{
this.masgA ++
})
}
})
Vue.component('component-b',{
template: `<div><button @click="incrementA">{{masgB}}</button></div>`,
data () {
return {
masgB : 0
}
},
methods: {
incrementA: function () {
bus.$emit('incrementA')
}
},
mounted: function(){
bus.$on('incrementB',() => {
this.masgB ++
})
}
})
var vm = new Vue({
el: "#app"
})
</script>
同时也可以看出这么做仅有两个组件就有些麻烦,事件的流向不是很清晰,所以在出现复杂的场景时需要使用VueX进行管理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue非父子组件通信
# Vue父子组件通信
# Vue组件通信
# 详解Vue 非父子组件通信方法(非Vuex)
# vue2.0父子组件及非父子组件之间的通信方法
# vue2利用Bus.js如何实现非父子组件通信详解
# vue中的event bus非父子组件通信解析
# vue非父子组件通信问题及解决方法
# vue3 非父子组件通信详解
# Vue组件通信中非父子组件传值知识点总结
# vue中非父子组件的通信你了解吗
# Vue非父子组件之间的通信方式详解
# 可以看出
# 建立一个
# 文档
# 两种
# 可以用
# 却没有
# 再来
# 都说
# 自定义
# 几句
# 很清楚
# 这么做
# 看一下
# 可直接
# 试着
# 来实现
# 要使
# 先看
# 大家多多
# 就不会有
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Java类加载基本过程详细介绍
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何确认建站备案号应放置的具体位置?
浅述节点的创建及常见功能的实现
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Bootstrap整体框架之CSS12栅格系统
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
php打包exe后无法访问网络共享_共享权限设置方法【教程】
C#如何调用原生C++ COM对象详解
,网页ppt怎么弄成自己的ppt?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel如何创建自定义Artisan命令?(代码示例)
如何快速搭建高效香港服务器网站?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
使用C语言编写圣诞表白程序
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何实现API版本控制_Laravel版本化API设计方案
如何快速搭建个人网站并优化SEO?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
高端云建站费用究竟需要多少预算?
如何快速打造个性化非模板自助建站?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
BootStrap整体框架之基础布局组件
Laravel怎么实现验证码(Captcha)功能
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何用搬瓦工VPS快速搭建个人网站?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
原生JS实现图片轮播切换效果
HTML 中动态设置元素 name 属性的正确语法详解
如何快速上传建站程序避免常见错误?
*服务器网站为何频现安全漏洞?
详解Oracle修改字段类型方法总结
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel怎么使用artisan命令缓存配置和视图

