Vue中provide和inject 用法(vue组件爷孙传值)

本文介绍了Vue.js中的Provide/Inject特性,用于实现父组件向子孙组件传递数据,解决了孙组件无法直接访问祖先组件数据的问题。提供了一个包含父组件、子组件和孙组件的完整DEMO,展示了如何定义和注入数据及方法,以及孙组件如何通过注入接收这些值和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.概念

2.使用示例DEMO


1.概念

  成对出现:provide和inject是成对出现的

  作用:用于父组件向子孙组件传递数据

  使用方法:provide在父组件中返回要传给下级的数据,inject在需要使用这个数据的子辈组件或者孙辈等下级组件中注入数据。

  使用场景:由于vue有$parent属性可以让子组件访问父组件。但孙组件想要访问祖先组件就比较困难。通过provide/inject可以轻松实现跨级访问父组件的数据

2.使用示例DEMO

父组件:通过provide指定传递给子孙组件的值和方法

<template>
	<div id="app">
		我是父组件:{{message}}
		<second></second>
	</div>
</template>

<script>
import second from '../components/second.vue'
export default{
	data(){
		return{
			message:'我们一起当前端攻城狮!'
		}
	},
	provide(){ // provide是一个匿名函数,返回一个对象
		return {
			testmethods:this.testmethods,
			message:this.message
		}
	},
	methods:{
		testmethods(){
			console.log('调用了ProvideTest这个组件')
		}
	},
	components:{
		second
	}
}
</script>

<style lang="less" scoped>
	
</style>

子组件:用inject接收父组件的值和方法,并且继续套一个组件

<template>
	<div id="app">
		<p>second组件:{{message}}</p>
		<third></third>
	</div>
</template>

<script>
import third from './third.vue'
export default{
	data(){
		return{
			
		}
	},
	inject:['message','testmethods'],
	mounted() {
		this.testmethods()
	},
	components:{
		third
	}
}
</script>

<style lang="less" scoped>
	
</style>

重点来了,我们称之为

孙组件:

<template>
	<div id="app">
		<p>third组件:{{message}}</p>
	</div>
</template>

<script>
export default{
	data(){
		return{
			
		}
	},
	//inject:['message','testmethods'], 简写
	inject:{ // 详细指定来源以及默认值
		message:{
			from:'message', //表示从组件ProvideTest传递过来的
			//default:'message' //默认值
		},
		testmethods:{
			form:'testmethods'
		}
	},
	mounted() {
		this.testmethods()
	},
}
</script>

<style lang="less" scoped>
	
</style>

效果下图所示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值