Vue2的依赖注入(跨级通信)基本使用

provide(提供) ,inject(注入)  祖先级组件用provide传递数据,它的所有后代都可以通过inject取到数据

 使用演示:

 

//祖先组件
<template>
 <div>
   父组件传的值:{{num}}
</div>
</template>

<script>
//导入子组件
import Son from '@/component/Son'
export default{
 data(){
   return{
     num:10
   }
  },

//祖先级组件把要传递的数据放入provide里
provide(){  
   return{
      num:this.num
  },
}
}
</script>

//儿子组件
<template>
  <div>
    子组件接收传来的值:{{num}}
  </div>
</template>

<script>
//导入孙子级别组件
import Grandson from '@/component/Grandson'
  export default{
   //后代组件可以通过inject拿到数据
   inject:['num']
}
</script>
//孙子组件
<template>
   <div>
    孙子组件接收传来的值:{{num}}
  </div>
</template>

<script>
 export default{
   //后代组件可以通过inject拿到数据
  inject:['num']

}
</script>

但是依赖注入的数据默认不是响应式的,祖先级别组件修改数据,其他使用到这个数据的组件不会同步

官网:

我点击按钮使祖先组件的num值+1,只有祖先组件的num值变了

使依赖注入的数据成为响应式的:

 第一种方法(把要传的数据放在对象里):

<template>
  <div>
    父组件传的值:{{ obj.num }} <br />
    <Son></Son>
    <button @click="addNum">+1</button>
  </div>
</template>

//再祖先组件里把要穿的数据放在一个对象里
export default{

 data(){
    return{
      obj:{
          num:10   
        }      
    }
 },

provide(){
   return{
     //把这个对象传过去
     obj:this.obj
   }
 },

methods: {
    addNum () {
      this.obj.num++
    }
}
<template>
 <div>
   {{obj.num}}
 </div>
<//template>

//孙子组件
export default{
  inject:['obj']
}

此时再祖先组件里修改num数据,所有使用到这个数据的组件都会同步

 第二种方法,传递一个参数用方法返回

//祖先组件
export default{
  data(){
    return{
      age:6
    }
  },

 provide(){
   return{
     age(): => this.age
   }
  }
}
<template>
  <div>
    {{age()}}
 </div>
</template>

//孙子组件
export default{
  inject:['age']
}

 Over Over!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值