一、基本用法:
import { ref, provide } from 'vue'
const radio = ref< string> ( 'red' )
provide ( 'myColor' , radio)
import { inject } from 'vue'
import type { Ref } from 'vue' ;
const myColor = inject< Ref< string>> ( 'myColor' )
二、示例:
< template>
< div>
< p> 这是父级组件< / p>
< el- radio- group v- model= "radio" >
< el- radio label= "red" > 红色< / el- radio>
< el- radio label= "yellow" > 黄色< / el- radio>
< el- radio label= "blue" > 蓝色< / el- radio>
< / el- radio- group>
< div class = "box" : style= "setStyle()" > < / div>
< / div>
< Son> < / Son>
< / template>
< script setup lang= 'ts' >
import { ref, provide } from 'vue'
import Son from '../components/Son.vue' ;
const radio = ref< string> ( 'red' )
provide ( 'myColor' , radio)
const setStyle = ( ) => {
return {
backgroundColor : radio. value
}
}
< / script>
< style scoped lang= 'scss' >
. box {
width : 200px;
height : 200px;
border : 1px solid #ccc;
transition : all 1s;
}
< / style>
< template>
< div>
< p> 这是儿子组件< / p>
< div class = "box" : style= "setStyle()" > < / div>
< / div>
< Grandson> < / Grandson>
< / template>
< script setup lang= 'ts' >
import { inject } from 'vue'
import type { Ref } from 'vue' ;
import Grandson from './Grandson.vue' ;
const myColor = inject< Ref< string>> ( 'myColor' )
const setStyle = ( ) => {
return {
}
}
< / script>
< style scoped lang= 'scss' >
. box{
width : 200px;
height : 200px;
border : 1px solid #ccc;
background- color: v- bind ( myColor) ;
transition : all 1s;
}
< / style>
< template>
< div>
< p> 这是孙子组件< / p>
< div class = "box" > < / div>
< / div>
< / template>
< script setup lang= 'ts' >
import { inject } from 'vue'
const myColor = inject ( 'myColor' )
< / script>
< style scoped lang= 'scss' >
. box{
width : 200px;
height : 200px;
border : 1px solid #ccc;
background- color: v- bind ( myColor) ;
transition : all 1s;
}
< / style>