父子组件通信学习经验记录

本文详细介绍了在Vue.js中如何实现父子组件之间的数据和方法传递。方法1利用`$emit`触发自定义事件进行数据传递,适用于事件触发场景;方法2通过`ref`直接调用组件方法获取数据,适用于无事件时的通信。同时,文章讲解了父组件如何通过props将数据传给子组件。这些技巧对于理解Vue.js组件间通信至关重要。
摘要由CSDN通过智能技术生成

1、子传父:
如果要想将子组件的数据和方法传递给父组件:
方法1:一般是在触发子组件事件时,使用this.$emit()方法,触发父组件绑定在子组件使用标签身上的自定义事件,多级传递时,父组件和爷爷组件的自定义事件最好不要写一样的,在爷爷组件中可以用_自定义事件名来区别父亲和爷爷组件的自定义事件

子组件
click(){
	this.$emit('update',数据)
}

父组件
<son @update="update"/>
methods:{
	update(val){
		this.$emit('_update',val)
	}
}

爷爷组件
<father @_update="_update"/>
methods:{
	_update(val){
		//val是子组件传递的数据
	}
}

方法2:但是如果没有事件需要触发,要想传值,可以在子组件中定义方法,将数据return出去,然后在父组件中通过ref引用调用子组件的方法,取得子组件的数据,如果要多级传递,就将函数的调用再放到父组件的方法中,在爷爷组件中通过父组件的ref引用调用父组件的函数,进而调用子组件的函数。传递子组件的方法,方式也是一样的

子组件:
name:'Son',
data(){
	return {msg:'1'}
},
methods:{
 //将子组件的数据放在一个方法中
	getMsg(){
		return this.msg
	},
	method1(){
		//子组件的方法
	}
}

父组件:
< son ref="Son"/>
// 在父组件中调用子组件的dom中的方法,拿到子组件的数据
// this.$refs.子组件使用标签身上的ref值.子组件的方法()
import Son form '子组件所在路径'
export default {
	name:'Father',
	components:{'Son'},
	data(){
	return {}
	},
	methods:{
		getMsg(){
			this.$refs.Son.getMsg()
		},
		method2(){
			this.$refs.Son.method1()
		}
	}
}

爷爷组件
< Father  ref="Father"/>
import Father form '子组件所在路径'
export default {
	name:'grandFather',
	components:{'Father'},
	data(){
		return {}
	},
	methods:{
		getMsg(){
			this.$refs.Father.getMsg()
		},
		method3(){
			this.$refs.Father.method2()
		}
	}
}

这样就将子组件数据一级一级传递给了他爷爷,
取得子组件的方法也是类似的方式,在父组件中调用子组件的方法,在爷爷组件中调用父组件的方法,这样就一次调用了爷爷组件的方法,然后是父组件的方法,最后是子组件的方法。

2、父传子:
将父组件的数据和方法传递给子组件,将数据动态绑定在子组件的使用标签身上,在子组件中通过props属性接收父组件的数据和方法

父组件
<son :data="data" :getData="getData"/>

子组件
export default {
	name:'Son',
	//props:['data'] 注意接收的数据用引号括起来
	props:{
		data:{
			type:String,
			default:''
		},
		getData:{
			type:Function,
			default:function(){}
		},
		...
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值