Vue2.x 中,通过provide和inject实现祖孙组件传值

本文介绍了Vue.js中provide和inject的功能,它们被用来实现祖孙组件间的通信。通过实例展示了如何在祖先组件中提供数据,并在子孙组件中注入这些数据,无论组件层级有多深。

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

介绍

使用provideinject 可以实现祖孙组件之间的通信;通常这两个属性要一起使用;祖先组件通过 provide将需要向子孙组件传递的值return 出去;然后子孙组件通过inject注入依赖;不管层级有多深,都可以使用祖先组件传递过来的数据以及方法。祖孙组件的传值,一般用于多层级的关系当中,使用便捷。

使用

祖先组件:

<script>
export default {
  data() {
    return {
      user: {
        name: 'lisa',
        age: 14,
      },
      number: 1,
      list: [
        {
          index: 0,
          str: 'first'
        },{
          index: 1,
          str: 'second'
        }
      ]
    }
  },
  provide() {
    return {
      state: this,  // 将整个this 传递给子孙组件
    }
  }
}
</script>

子孙组件:

 <template>
    <div class="son">
      <span>{{state.member}}</span>
    </div>
 </template>
<script>
export default {
   inject: ['state'], //注入依赖
   data() {
    return {
    }
  },
	created() {
	  console.log(this.state); // 打印祖先组件传递过来的整个this对象
	}
}
</script>
### Vue2 祖孙组件间的数据递 在Vue2项目中,当涉及到多层级嵌套的组件结构时,祖孙组件之间的数据递可以通过`provide``inject`机制来实现。对于从组件向祖父组件递数据的情况,可以采用事件触发的方式结合`$emit`方法完成这一过程。 #### 使用 Provide Inject 实现跨级通信 为了使子组件能够访问到更上层组件的状态或函数,在顶层组件(即这里的祖父组件)内提供(`provide`)一些共享资源;而在目标子代组件里注入(`inject`)这些被提供的项即可获得所需的信息[^1]。 ```javascript // 祖父组件 Grandfather.vue export default { provide () { return { updatePosition: this.updatePosition, currentPosition: this.currentPosition } }, data() { return { currentPosition: "少将" }; }, methods:{ updatePosition(newPos){ console.log("位置更新为:", newPos); this.currentPosition = newPos; } } } ``` ```html <!-- 组件 Grandson.vue --> <template> <div class="grandson"> 当前职位:{{currentPosition}} </div> </template> <script> export default { inject: ['updatePosition', 'currentPosition'], mounted(){ setTimeout(() => { // 模拟异步操作后通知祖父组件更改状态 this.updatePosition('司令员'); }, 2000) } } </script> ``` 上述例子展示了如何让组件通过`inject`获取并调用由祖父组件提供的方法`updatePosition()`以及读取其变量`currentPosition`。这使得即使不经过中间层次也可以轻松地进行双向沟通[^3]。 另外一种常见做法是利用全局事件总线(Event Bus),不过这种方法已被官方建议减少使用,因为容易造成难以追踪维护的问题。相比之下,`provide/inject`更加直观且易于理解[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值