vue的组件通信

第一种父子通信

1、创建子组件,在src/components/文件夹下新建一个Child.vue
2、Child.vue中创建props,然后创建一个名为message的属性

<template>
	<div>
		<h2>child子组件</h2>
		<p> {{ message }} </p>
	</div>
</template>
<script>
	export default{
		props:['message']
	}
</script>

3、在App.vue
中注册Child组件,并在template中加入child标签,标签中添加message属性并赋值

<template>
	<div id="app">
		<child message="hello"></child>
	</div>
<template>
<script>
import child from './components/Child';
export default {
	name : 'app',
	components:{
		child
	}
}
</script>

浏览器显示为

child子组件部分

hello

5.我们也可以对message进行动态绑定

<template>
	<div id="app">
		<child :message="parentMsg"></child>
	</div>
<template>
<script>
import child from './components/Child';
export default {
	name : 'app',
	components:{
		child
	},
	data(){
		return {
			parentMsg: "hello,child"
		}
	}
}
</script>
第二种子传递给父元素
<template>
 <div>
 	<h2> child子组件 </h2>
 	<p> {{message}} </p>
 	<button :chilk="sendMsgToParent">向父组件传递</button>
 </div>
</template>
<script>
	export default{
		props:["message"],
		methods:{
			sendMsgToParent:function(){
			}
		}
	}
</script>

2.在响应该点击事件的函数中使用$emit来触发一个自定义事件,并传递一个参数

<template>
 <div>
 	<h2> child子组件 </h2>
 	<p> {{message}} </p>
 	<button :chilk="sendMsgToParent">向父组件传递</button>
 </div>
</template>
<script>
	export default{
		props:["message"],
		methods:{
			sendMsgToParent:function(){
				this.$emit("listenToChildEvent","this message is from child")
			}
		}
	}
</script>

3.在父组件中的子标签中监听该自定义事件并添加一个响应该事件的处理方法

<template>
 <div id="app">
 	<child :message="parentMsg" @listenToChildEvent="showMsgFromChild"></child>
 </div>
</template>
<script>
import child from "./components/Child";
	export default{
		name: 'app',
		data(){
			return {
				parentMsg: "hello,child"	
			}
		},
		methods:{
			showMsgFromChild:function(data){
				console.log(data);
			}
		}
	}
</script>

4、浏览器显示

在这里插入图片描述
在这里插入图片描述

子父通信的小结

  • 子组件中需要以某种方式例如点击事件的方法来触发一个自定义事件
  • 将需要传的值作为$emit的第二个参数,该值将作为实参传给响应自定义事件的方法
  • 在父组件中注册子组件并在子组件标签上绑定对自定义事件的监听

在通信中,无论是子组件向父组件传值还是父组件向子组件传值,他们都有一个共同点就是有中间介质,子向父的介质是自定义事件,父向子的介质是props中的属性。抓准这两点对于父子通信就好理解了

第三种事件总线平级通信

无论是子组件向父组件传值还是父组件向子组件传值,他们都有一个共同点就是有中间介质,兄弟通信一样需要一个介质,中央事件总线

1、先创建中央事件总线,在src/assets
/下创建一个eventBus.js

在这里插入图片描述

2、创建一个firstChild组件,引入这个事件总线,然后添加一个按钮,并绑定这个点击事件

在这里插入图片描述

3、我们再创建一个secondChild组件,引入事件总线,通过一个p标签来显示传递过来的值

在这里插入图片描述

4、在父组件中,注册这两个组件,并添加组件的标签

在这里插入图片描述
小结:

  • 创建一个事件总线,例如demo中的eventBus,用它作为通信桥梁
  • 在需要传值的组件中用bus.$emit触发一个自定义事件,并传递参数
  • 在需要接收数据的组件中用bus.$on监听自定义事件,并在回调函数中处理传递过来的参数
    参考原文:https://www.jianshu.com/p/2670ca096cf8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值