vue provide inject组合使用实例

本文介绍了Vue.js中如何使用provide/inject实现组件间的跨级通信,详细展示了如何在祖先组件提供数据或方法,以及在子孙组件中注入并使用这些数据或方法,包括刷新组件功能的实现和数据的传递。同时,提供了两种具体的使用场景,分别是子组件调用父组件的reload方法来刷新组件和孙组件访问祖先组件的数据进行显示。
摘要由CSDN通过智能技术生成

vue项目中inject使用

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

//app.vue
<template>
	<div id="app">
		<router-view v-if="isRouterAlive"/>
	</div>
</template>
<script>
	export default{
		name:'App',
		//父组件中返回要传给下级的数据
	  	provide() {
	    	return {
	     		reload: this.reload,
    		}
	  	},
		data(){
			return{
				isRouterAlive:true
			}
		},
		methods:{
			reload(){
				this.isRouterAlive=false
				this.$nextTick(()=>{
					this.isRouterAlive=true
				})
			}
		}
	}
</script>
<template></template>
<script>
	export default{
		//引用vue reload 方法
		inject:['reload'],
		methods:{
			this.reload()
		}
	}
</script>

这样就实现了子组件调取reload方法实现刷新vue组件的功能,实现了组件跨越组件传递数据方法。
第二种是祖孙元素调取

//ancestor.vue
<template>
	<div id="app"></div>
</template>
<script>
export default{
	data(){
		return{
			datas: [
             	{
                    id: 1,
                    label: '产品一'
                },
                {
                    id: 1,
                    label: '产品二'
                },
                {
                    id: 1,
                    label: '产品三'
                }
            ]
		}
	},
	provide{
		return {
			dattas:this.datas
		}
	}
}
</script>
//后代组件
<template>
	<div>
		<ul>
			<li v-for="(item,index) in datas" :key="index">{{item.label}}</li>
		</ul>
	</div>
</template>
<script>
	export default{
		inject:['datas']
	}
</script>
//后代元素引入被注入数据datas,并在组件内循坏输出

在父组件里面

 provide() {
    return {
      Index: this,
    };
  },
  methods:{
	openMenu() {
     	//进行某些操作
    },
}

在子级组件调用openMenu方法

inject: ["Index"],
created(){
	this.Index.openMenu();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值