vue3传值 祖孙传值(7)

复习:vue2祖孙传值--依赖注入

在祖辈组件传数据给孙辈组件,使用provide将需要传送的数据定义为依赖数据,孙辈使用inject接收,类似于props,接到以后可以直接在模板中使用。
祖辈组件
data() {
    return {
      name:'lily',
      age:20
    }
  },
  provide(){
    return {
      name:this.name,
      age:this.age
    }
  }
孙辈组件
 inject:['name','age'],
如果需要在孙辈组件里面修改传过来的信息,需要中转。如果在孙辈组件直接修改祖辈组件里面的信息,在孙辈组件methods里面写自定义事件触发,然后在父组件里面接,父组件里面的methods,再次触发自定义事件,传给祖辈组件,这样很麻烦。我们可以直接在祖辈组件中定义一个修改数据的方法,将这个方法也变成依赖数据传给孙辈组件。

vue3 祖孙传值

在祖辈组件中使用provide组合式API将数据设置为依赖数据,从此他的子组件,就可以获取数据。它有两个参数,第一个属性名,第二个是属性值。
import{ref,provide} from 'vue'
export default {
  name: 'App',
  setup() {
    let name=ref('lily')
    let age=ref(20)
provide('name',name)
provide('age',age)
 return{
      name,age
    }
  }
}
然后孙辈组件用inject接收数据,然后再返回出来让模板使用
import {inject} from 'vue'
export default {
name:'SubSon',
setup() {
    let name=inject('name')
    let age=inject('age')
    return{
        name,age
    }
}
如果需要修改从祖辈传过来的信息
 <button @click="update">修改信息</button>

export default {
name:'SubSon',
setup() {
    let name=inject('name')
    let age=inject('age')
let update=()=>{
    name.value="hello"
    age.value=23
}

    return{
        name,age,update
    }
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容