vue的provide和inject的理解

最近使用了别人的一个插件,看到别人用了provid和inject,感觉很有意思,mark一下

具体的东西,注意事项可以看官方的文档,我们只是讨论一下,provide和inject的常规用法

首先我们知道,父子组件传值的话,使用的是prop,但是要是爷孙组件传值的话,用什么?

有人讲用bus或者用vuex的,这当然行,但是vue提供了另外一种针对于爷孙或者其他的直系传值的方法,就是provide和inject。

注意,必须是直系的嵌套关系才能够使用

在这里插入图片描述

//祖先组件里面
<template>
	<view>
		<test></test>
	</view>
</template>

<script>
	import test from '../../components/test/test.vue'
	export default {
		data() {
			return {
			};
		},
		// provide 值接收一个对象
		provide:{
			foo:'123123'
		},
		components:{
			test
		}
	}
</script>

<style lang="scss">

</style>

在祖先页面中,我们定义了一个provide的对象,这个对象有一个属性,属性名就是我

在下面的直系亲属的组件里面通过inject获取到的

在这个页面的孙子组件里面 我我们通过inject[‘foo’]来获取到父组件的值

<template>
	<view>
		{{testFoo}}
	</view>
</template>

<script>
	export default {
		data() {
			return {
				testFoo: this.foo
			};
		},
		inject: ['foo'],
		mounted() {
			console.log('beforeCreate', this)
		}
	}
</script>

<style lang="scss">

</style>

获取到了这个值以后,我们就能够使用它了

另外一个最长用的用法,大概就是刷新组件了

比如我们向刷新一个组件,或者在孙子或者更加后代的组件里面去控制父组件里面的元素的显示和隐藏

//父亲组件
<template>
	<view>
		<test></test>
		<view v-if="ifHide">测试显示可隐藏</view>
	</view>
</template>

<script>
	import test from '../../components/test/test.vue'
	export default {
		data() {
			return {
				data1:'123123',
				ifHide:true
			};
		},
		// provide 值接收一个对象
		provide(){
			return{
				domHide:this.domHide
			}
		},
		methods:{
			domHide(){
				let that = this
				that.ifHide = !that.ifHide
			}
		},
		components:{
			test
		}
	}
</script>

<style lang="scss">

</style>

//孙子或者其他直系亲属里面
<template>
	<view>
		<button @click="changeHide">点击</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				testFoo: this.foo
			};
		},
		inject: ['domHide'],
		mounted() {
			console.log('beforeCreate', this)
		},
		methods:{
			changeHide(){
				this.domHide()
			}
		}
	}
</script>

<style lang="scss">

</style>


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值