vue中provide和inject 用法

Vue的provide和inject选项提供了一种在组件层级间传递数据的机制,尤其适用于解决多层嵌套组件间的通信问题。父组件通过provide传递数据和方法,而子孙组件则通过inject来接收,避免了props逐级传递的繁琐。然而,这种方式可能导致数据追踪困难,因此应谨慎使用。案例展示了parent.vue如何提供数据和方法,以及child.vue如何注入并使用这些数据。
摘要由CSDN通过智能技术生成

    我们平时在开发的时候,最常用的父子组件通信方式就是父组件绑定要传递给子组件的数据,然后子组件通过props属性接收。但是一旦组件层级变多时,采用这种方式一级一级传递值非常麻烦,而且代码可读性不高,不便后期维护。而且如果父组件内子组件较多,还需要对每一个子组件一一去绑定数据。

    所以vue提供了provideinject帮助我们解决多层次嵌套嵌套通信问题。在provide中指定要传递给子孙组件的数据,子孙组件通过inject就可以注入祖父组件传递过来的数据,不论组件层次有多深,始终生效。

首先来看下两者的概念:

1. provide:是一个对象,或者是一个返回对象的函数。可以将想要传递给子孙组件的属性写入该对象中。

        注意:若子孙组件中的provide和父组件中provide提供的key有所相同,那么子孙组件会覆盖原本父组件的value

2. inject:一个字符串数组,或 一个对象,对象的 key 是本地的绑定名,value 是: 在可用的注入内容中搜索用的 key (字符串或 Symbol),或 一个对象,该对象的: from 属性是在可用的注入内容中搜索用的 key (字符串或 Symbol) default 属性是降级情况下使用的 value

然后看下具体使用的案例:

parent.vue

<template>
  <div>
     这是一代组件
  </div>
</template>

<script>
export default {
  components: {
    MergeTipDialog,
    BreakNetTip
  },
  data () {
    return {}
  },

 // 父组件中返回要传给下级的数据
  provide () {
    return {
      test:'这是一代组件的数据',
      onChange:()=>{}
    }
  },
  methods: {
   
  }
}
</script>

child.vue 

<template>
  <div>
    这是父组件传递的{{test}}
  </div>
</template>
<script>
import PopupAssign from '../PopupAssign'
export default {
 //引用
  inject: ['test'],
  inject: {
      test:{
       from:'test',   // 如果它需要从一个不同名字的属性注入,则使用 from 来表示其源属性
       default:'xxxx'
      },
     _change: { // 命名与子组件冲突可以更改别名
      from: 'onChange'
    },
  },
 methods:{
   onChange(){

    }
 }
  
}
</script>

 上面就是使用provide和inject 完成的组件之间的传值

在这里要注意,祖先组件不知道哪些后代组件使用它提供的属性 后代组件不知道被注入的属性来自哪里,这里可能会导致数据比较难追踪定位,所以不推荐大家随便使用这个。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值