vue自定义事件与组件传值指南

 更新时间:2026年07月11日 10:11:33   作者:bulibuluo  
想掌握Vue组件通信?本文用最直白的语言拆解自定义事件三步法,从声明触发到父子兄弟传值,配合EventBus实战案例,让你3分钟搞定跨组件数据传递,核心关键词:组件通信、自定义事件、Vue传值

在vue中,除了click、mouseleave ...等原生事件,vue还支持自定义事件。

自定义事件应该分为三步

1、声明自定义事件

2、监听自定义事件

3、触发自定义事件

在vue中,声明和监听自定义事件被合为一个步骤,即使用$on(eventName,callback)同时声明和监听;

触发事件则使用$emit(eventName[,...arg])...arg是传递给监听回调callback的参数列表

组件传值分为三种:父子、子父以及兄弟

父子传值

父子传值较为容易,只需在父组件内为子组件标签添加属性,然后在子组件内通过props属性接收即可

Vue.component("Parent",{
	template: "<div className='parent'><child data='这是传递给子组件的信息' /></div>",
	components: {
		Child
	}
})
Vue.component("Child",{
	template: "<div className='child'>{{data}}</div>",
	props: ["data"]
})

//渲染Parent组件的HTML结果为 
//<div class="parent">
//	<div class="child">
//		这是传递给子组件的值
//	</div>
//</div>
//注意,接收的属性命名必须和父组件传递过来的属性同名

子父传值

利用自定义事件来传值,在父组件内使用$on声明和监听自定义事件,在子组件内触发事件并传值

Vue.component("Parent",{
	template: "<div className='parent'><child @myEvent='myEventHandler' /></div>",
	components: {
		Child
	},
	methods: {
		myEventHandler: function (data) {
			console.log(data)
		}
	}
})
Vue.component("Child",{
	template: "<div className='child'></div>",
	mounted: {
		this.$emit("myEvent","这是传递给父组件的数据")
	}
})
//渲染Parent,控制台会弹出:这是传递给父组件的数据

兄弟传值

利用eventBus实现,所谓eventBus,其实就是一个Vue实例对象,我们为这个对象添加自定义事件并在需要的时候触发这个实例上的自定义事件

var eventBus = new Vue()

Vue.component("Parent",{
	template: "<div className='parent'><child1 /><child2 /></div>",
	components: {
		Child1,
		Child2
	},
	methods: {
		myEventHandler: function (data) {
			console.log(data)
		}
	}
})
Vue.component("Child1",{
	template: "<div className='child1'>child1</div>",
	mounted: {
		eventBus.$on("brotherEvent",(data) => {
			//注意this绑定的上下文对象,这里使用了箭头函数
			cosnole.log(data);
		})
	}
})
Vue.component("Child2",{
	template: "<div className='child1'>child2</div>",
	mounted: {
		eventBus.$emit("myEvent","这是 Child2 传递给Child1 的数据")
	}
})

//渲染Parent,控制台会弹出:这是 Child2 传递给Child1 的数据

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue中的组件详谈

    Vue中的组件详谈

    这篇文章主要介绍了Vue的组件,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • vue中的循环对象属性和属性值用法

    vue中的循环对象属性和属性值用法

    这篇文章主要介绍了vue中的循环对象属性和属性值用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造

    vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造

    这篇文章主要介绍了vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造,home.vue 组件有了两个属性:navs 和 tts 属性,具体实例代码大家跟随小编一起通过本文学习吧
    2018-09-09
  • Element的Pagination分页sync问题小结

    Element的Pagination分页sync问题小结

    本文主要介绍了Element的Pagination分页sync问题小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • vue组件间通信解析

    vue组件间通信解析

    这篇文章主要为大家详细介绍了vue组件间通信解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • vue3+Ant-design-vue3+i18n实现多语言切换功能

    vue3+Ant-design-vue3+i18n实现多语言切换功能

    这篇文章主要为大家详细介绍了如何通过vue3+Ant-design-vue3+i18n实现多语言切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-04-04
  • Vite处理html模板插件之vite-plugin-html插件使用

    Vite处理html模板插件之vite-plugin-html插件使用

    这篇文章主要给大家介绍了关于Vite处理html模板插件之vite-plugin-html插件使用的相关资料,Vite是一个现代化的前端构建工具,而vite-plugin-html是Vite的一个插件,用于在构建时自动生成HTML文件,需要的朋友可以参考下
    2023-10-10
  • 关于vue-router的那些事儿

    关于vue-router的那些事儿

    要学习vue-router就要先知道这里的路由是什么?为什么我们不能像原来一样直接用标签编写链接哪?vue-router如何使用?常见路由操作有哪些?等等这些问题,就是本篇要探讨的主要问题,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • VueX安装及使用基础教程

    VueX安装及使用基础教程

    这篇文章介绍了VueX安装及使用基础教程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • vue transition组件及常用属性

    vue transition组件及常用属性

    在使用Vue过渡动画时,注意选择器优先级,谨慎合并样式,Vue2中关于显示隐藏的类名有v-enter、v-leave以及v-enter-active、v-leave-active等,这些可以用来定义动画的持续时间和样式,感兴趣的朋友跟随小编一起看看吧
    2024-09-09

最新评论