vue父组件向子组件传值,子组件调用父组件的方法

父组件向子组件传值最基本的方法如下
子组件通过props接收

// 父组件
<template>
	<div>
		我是父组件
		<testApi :environmentId="environmentId"></testApi>
	</div>
</template>

<script>
import testApi from '@/views/apiManage/testApi'
export default {
    
    
	data() {
    
    
		return {
    
    
			environmentId: ''
		}
	},
	components: {
    
    
		testApi
	}
}
// 子组件
<template>
	<div>
		我是子组件
		{
    
    {
    
     environmentId }}
	</div>
</template>

<script>
export default {
    
    
	// 接受父组件的值
	props: {
    
    
		environmentId: {
    
    
			type: String// 定义接收到的数据的类型
			default: '这个数据变量的默认值',
			required: false //规定这个数据是否必传,默认false
		}
	},
	data() {
    
    
		return {
    
    }
	},
	mounted () {
    
    
		console.log(this.environmentId)
	}
}

第二种方法是直接通过this.$refs.myTestApi.title = ‘’ 设置子组件里面的值

// 父组件
<template>
	<div>
		我是父组件
		<button @click="change">改变子组件里面的值</button>
		<testApi ref="myTestApi"></testApi>
	</div>
</template>

<script>
import testApi from '@/views/apiManage/testApi'
export default {
    
    
	data() {
    
    
		return {
    
    }
	},
	components: {
    
    
		testApi
	},
	methods: {
    
    
		change() {
    
    
			this.$refs.myTestApi.title = '新增产品'
		}
	}
}
// 子组件
<template>
	<div>
		我是子组件
		{
    
    {
    
     title }}
	</div>
</template>

<script>
export default {
    
    
	data() {
    
    
		return {
    
    
			title: ''
		}
	},
	mounted () {
    
    
		console.log(this.title)
	}
}

子组件调用父组件的方法如下:
第一种方法:子组件里用$emit向父组件触发一个事件,父组件监听这个事件

// 父组件
<template>
	<div>
		我是父组件
		<button @click="change">方法</button>
		<testApi @change="change"></testApi>
	</div>
</template>

<script>
import testApi from '@/views/apiManage/testApi'
export default {
    
    
	data() {
    
    
		return {
    
    }
	},
	components: {
    
    
		testApi
	},
	methods: {
    
    
		change() {
    
    
			console.log('我是猪')
		}
	}
}
// 子组件
<template>
	<div>
		我是子组件
		{
    
    {
    
     title }}
	</div>
</template>

<script>
export default {
    
    
	data() {
    
    
		return {
    
    
			title: ''
		}
	},
	mounted () {
    
    
		this.$emit('change')
	}
}

第二种直接在子组件中通过this.$parent.event来调用父组件的方法

// 父组件
<template>
	<div>
		我是父组件
		<button @click="change">方法</button>
		<testApi></testApi>
	</div>
</template>

<script>
import testApi from '@/views/apiManage/testApi'
export default {
    
    
	data() {
    
    
		return {
    
    }
	},
	components: {
    
    
		testApi
	},
	methods: {
    
    
		change() {
    
    
			console.log('我是猪')
		}
	}
}
// 子组件
<template>
	<div>
		我是子组件
		{
    
    {
    
     title }}
	</div>
</template>

<script>
export default {
    
    
	data() {
    
    
		return {
    
    
			title: ''
		}
	},
	mounted () {
    
    
		this.$parent.change()
	}
}

第三种父组件把方法传入子组件中,在子组件里直接调用这个方法

// 父组件
<template>
	<div>
		我是父组件
		<button @click="change">方法</button>
		<testApi :change="change"></testApi>
	</div>
</template>

<script>
import testApi from '@/views/apiManage/testApi'
export default {
    
    
	data() {
    
    
		return {
    
    }
	},
	components: {
    
    
		testApi
	},
	methods: {
    
    
		change() {
    
    
			console.log('我是猪')
		}
	}
}
// 子组件
<template>
	<div>
		我是子组件
		{
    
    {
    
     title }}
	</div>
</template>

<script>
export default {
    
    
	props: {
    
    
		change: {
    
    
			type: Function,
			default: null
		}
	},
	data() {
    
    
		return {
    
    
			title: ''
		}
	},
	mounted () {
    
    
		this.change()
	}
}

参考此篇文章 Vue子组件调用父组件的方法,各种用法可能效率不同,想要深入研究的,欢迎在网上继续查找详细资料

猜你喜欢

转载自blog.csdn.net/weixin_43908123/article/details/108284021