首页 > 其他分享 >Vue3之provide 与 inject

Vue3之provide 与 inject

时间:2022-12-27 22:56:41浏览次数:47  
标签:vue name provide car inject Vue3 组件

 provide 与 inject 

  • 作用:实现祖与后代组件间通信,儿子组件中也能用这种方式,但是一般不这么用,父子组件传信息一般直接用props属性。

  • 套路:父组件有一个 provide 选项来提供数据,后代组件有一个 inject 选项来开始使用这些数据

  • 具体写法:

    1. 祖组件中:

      setup(){
      	......
          let car = reactive({name:'奔驰',price:'40万'})
          provide('car',car)
          ......
      }
      
    2. 后代组件中:

      setup(props,context){
      	......
          const car = inject('car')
          return {car}
      	......
      }

 示例:

 

 

 App.vue

 

<template>
    <div class="app">
        <h3>我是App组件(祖),{{name}}--{{price}}</h3>
        <Child/>
    </div>
</template>

<script>
    import { reactive,toRefs,provide } from 'vue'
    import Child from './components/Child.vue'
    export default {
        name:'App',
        components:{Child},
        setup(){
            let car = reactive({name:'奔驰',price:'40W'})
            provide('car',car) //给自己的后代组件传递数据
            return {...toRefs(car)}
        }
    }
</script>

<style>
    .app{
        background-color: gray;
        padding: 10px;
    }
</style>

Child.vue

 

<template>
    <div class="child">
        <h3>我是Child组件(子)</h3>
        <Son/>
    </div>
</template>

<script>
    import {inject} from 'vue'
    import Son from './Son.vue'
    export default {
        name:'Child',
        components:{Son},
        /* setup(){
            let x = inject('car')
            console.log(x,'Child-----')
        } */
    }
</script>

<style>
    .child{
        background-color: skyblue;
        padding: 10px;
    }
</style>

Son.vue

 

<template>
    <div class="son">
        <h3>我是Son组件(孙),{{car.name}}--{{car.price}}</h3>
    </div>
</template>

<script>
    import {inject} from 'vue'
    export default {
        name:'Son',
        setup(){
            let car = inject('car')
            return {car}
        }
    }
</script>

<style>
    .son{
        background-color: orange;
        padding: 10px;
    }
</style>

 

标签:vue,name,provide,car,inject,Vue3,组件
From: https://www.cnblogs.com/anjingdian/p/17009186.html

相关文章

  • Vue3之响应式数据的判断
    响应式数据的判断isRef:检查一个值是否为一个ref对象isReactive:检查一个对象是否是由 reactive 创建的响应式代理isReadonly:检查一个对象是否是由 readonly......
  • Vue3之customRef
    customRef作用:创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显式控制。比如在input更新数据之后,设置指定时间之后再在h3标签上重新展示最新的数据:<templ......
  • Vue3之toRaw 与 markRaw
    toRaw与markRawtoRaw:作用:将一个由reactive生成的响应式对象转为普通对象。ref的对象不行使用场景:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引......
  • Vue3之readonly 与 shallowReadonly
    readonly与shallowReadonlyreadonly:让一个响应式数据变为只读的(深只读)。shallowReadonly:让一个响应式数据变为只读的(浅只读)。应用场景:不希望数据被修改时。示......
  • Vue3之shallowReactive 与 shallowRef
    shallowReactive与shallowRefshallowReactive:只处理对象最外层属性的响应式(浅响应式)。shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理。什么时......
  • Vue3之toRef
    toRef作用:创建一个ref对象,其value值指向另一个对象中的某个属性。语法:constname=toRef(person,'name')应用:要将响应式对象中的某个属性单独提供给外部使用......
  • Vue3生命周期
    Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:beforeDestroy改名为 beforeUnmountdestroyed改名为 unmountedVue3.0也提供了CompositionAPI形式......
  • Vue3之watchEffect函数
    watchEffect函数watch的套路是:既要指明监视的属性,也要指明监视的回调。watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。wat......
  • vue3 项目中设置组件name
    在开发vue3项目时,如果使用的是setup语法,那么想要给组件设置name属性。可以通过下面的两种形式。在组件中额外创建一个script脚本,在其中采用选项式api的写法,设置name属性......
  • ASP.NET 2.0中使用自定义provider (2)
     在teched2005上,有对asp.net2.0的介绍,其中讲到asp.net2.0提供了很多功能,让程序员做少很多东西,这引起了大家的疑惑:asp.net2.0的自定义能力如何?扩......