provide 用于:让父组件 传递数据。
inject 用于:让后代组件 接收数据。
语法格式:
// 传递数据
import { provide } from 'vue';
provide('数据名', 数据);
// 接收数据
import { inject } from 'vue';
let 变量 = inject('数据名');
跨组件传参:
第一层组件:传递数据。
<template>
<h3>我是第一层组件</h3>
<p>{{ info.name }} : {{ info.age }}</p>
<hr />
<Two></Two>
</template>
<script setup>
// 引用 provide 函数
import { provide, reactive } from 'vue'
import Two from "../components/Two.vue"
let info = reactive({ name: "张三", age: 18 });
// 给后代组件传递数据
provide('info', info);
</script>
第二层组件:接收数据。
<template>
<h3>我是第二层组件</h3>
<p>{{ info.name }} : {{ info.age }}</p>
<hr />
<Three></Three>
</template>
<script setup>
// 引用 inject 函数
import { inject } from 'vue'
import Three from "../components/Three.vue"
// 接收数据
let info = inject('info');
</script>
第三层组件:接收数据。
<template>
<h3>我是第三层组件</h3>
<p>{{ info.name }} : {{ info.age }}</p>
</template>
<script setup>
// 引用 inject 函数
import { inject } from 'vue'
// 接收数据
let info = inject('info');
</script>
最终效果:
注:传递的数据可以在任意一层后代组件中使用。