Vue - 组件通信(父子单向传递、父子相互传递、祖孙隔代传递)

父组件向子组件单向传递

1. 父组件:引入子组件后,通过属性绑定的形式,将值传入子组件;

<template>
	<div>
		<son :sonGetParam="param2Son"></son>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				param2Son: "孩子,你好"
			}
		}
	}
</script>
2. 子组件:子组件通过props接收父组件传入的值;

<template>
	<div>
		<!-- 这里会展示出父组件传入的值:孩子,你好 -->
		<p>{{sonGetParam}}</p>
	</div>
</template>

<script>
	export default {
		props: {
			sonGetParam: {
			  type: String,
			  default: "",
			},
		}
	}
</script>

子组件向父组件单向传递

1. 父组件:引入子组件后,自定义一个用来处理自定义事件的方法,接收子组件传递的值;

<template>
	<div>
		<son @parentEvent="processEvent"></son>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				sonParam: ""
			}
		},
		methods: {
			// 监听并接收子组件传递的值
			processEvent(param) {
				this.sonParam = param; // Hello
			}
		}
	}
</script>
2. 子组件:子组件通过$emit触发自定义事件,将值传递给父组件;

<template>
	<div>
		<button @click="handleChildEvent">触发事件</button>
	</div>
</template>

<script>
	export default {
		methods: {
			handleChildEvent(param) {
				this.$emit('parentEvent', 'Hello')
			}
		}
	}
</script>

父组件和子组件相互传递

  1. 通过自定义函数的方式
①. 父组件:

<template>
	<div>
		<son :param="param" @changeParam="(data) => param = data"></son>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				param: ""
			}
		}
	}
</script>
②. 子组件:

<template>
	<div>
		<button @click="handleChildEvent">触发事件</button>
	</div>
</template>

<script>
	export default {
		methods: {
			handleChildEvent(param) {
				this.$emit('changeParam', 'changed')
			}
		}
	}
</script>
  1. 使用.sync进行双向绑定: 是“v-on:update:参数名”的简化写法
①. 父组件:

<template>
	<div>
		<son :param.sync="param"></son>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				param: ""
			}
		}
	}
</script>
②. 子组件:使用$emit('update:param');

<template>
	<div>
		<button @click="handleChildEvent">触发事件</button>
	</div>
</template>

<script>
	export default {
		methods: {
			handleChildEvent(param) {
				//“update:参数名”是vue约定俗成的
				this.$emit('update:param', 'changed')
			}
		}
	}
</script>

爷组件和孙组件隔代传递(适用于vue2.4.0版本以上)

①. 爷组件:定义处理值的自定义函数 和 接收孙组件传递过来的值的参数,同时将此值传递到孙组件;

<template>
	<div>
		<father :param="param" @eventMethod="handleEventMethod"></father>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				param: ""
			}
		},
		methods: {
			handleEventMethod(data) {
				this.param = data
			}
		}
	}
</script>
②. 父组件:使用“$attrs.参数名”获取父组件中除了prop传递的属性、class、style的属性;“v-on='$listeners'”获取作用在这个组件上的所有监听器;

<template>
	<div>
		<son :param="$attrs.param" v-on="$listeners"></father>
	</div>
</template>
③. 孙组件:通过props获取父组件传递的值;$emit('方法名', 需要传递的参数) 来触发自定义函数并传递值;

<template>
	<div>
		<p>{{param}}</p>
		<button @click="handleChildEvent">触发事件</button>
	</div>
</template>

<script>
	export default {
		props: {
			param: {
			  type: String,
			  default: "",
			},
		},
		methods: {
			handleChildEvent() {
				this.$emit('eventMethod', "changedParam")
			}
		}
	}
</script>

posted on   看我能坚持多久  阅读(146)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示