provide与inject

  • 作用: 实现祖孙组件的通信(其实 所有的后代都能接受到数据,隔了多少代都可以,一代也不搁的也可以)
  • 用法:父组件有一个provide来提供数据,后代组件有一个inject来接收数据;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<template>
<!-- 爷爷组件 -->
<h1>this is grandParent</h1>
<h3>{{name}}</h3>
<h3>{{price}}</h3>
<i-son></i-son>
</template>

<script>
import { provide, reactive, toRefs } from "vue";
import iSon from "./injectSon.vue";
export default {
components: {iSon},
setup() {
//声明响应式数据
let car = reactive({
name: "奔驰",
price: "40W",
});
// 将自己的数据传给后代组件(所有的后代都能接受到,隔了多少代都可以)
provide("myCar",car);

return{
...toRefs(car)
}
},
};
</script>

<style>
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<template>
<!-- 孙组件,中间还隔了一个父组件 -->
<h2>this is grandSon</h2>
<h3>{{name}}</h3>
<h3>{{price}}</h3>
</template>

<script>
import { inject, toRefs } from "vue";
export default {
setup() {
let car = inject("myCar");
console.log(car);
// 直接将获取到的响应式数据,解构;
return {
...toRefs(car),
};
},
};
</script>

<style>
</style>

inject