有没有办法在主机设置函数之外的 Vue3 动态组件中声明提供/注入?
P粉384366923
P粉384366923 2023-08-30 09:41:50
0
1
432

我正在 Vue3 中创建一个动态组件。我使用 v-bind 提供 props

 

我想使用提供/注入功能。如何将我提供的属性放入动态组件中。我的动态组件在 setup 函数中调用 inject,并期望为其子组件提供值。

虽然这在 Vue 上没有记录,但我没有成功尝试:

甚至尝试将 provide 对象放入 props 对象中。

P粉384366923
P粉384366923

全部回复 (1)
P粉122932466

浏览完 Vue3 源代码后,无法直接在模板中向动态组件指示provide规范。必须在托管动态组件的父级的设置函数或选项中,或者在动态组件的设置或选项中调用它。

这两个选项是:

  1. 您在托管动态组件的组件上调用provide
setup() { provide('message', 'hello') }

这对我不起作用,因为我的设置函数在我的动态组件被激活之前就被调用了;我还需要将组件类型和提供的值一起设置。

  1. 将要提供的项目作为 prop 发送到组件中,并让动态组件调用它们。
function setComponent(someImportedComponent, providedValues) { myComponent.value = someImportedComponent myProps.value = { toProvide: providedValues } }

我的组件

setup() { for(let [key,value] of Object.entries(props.toProvide) ) { provide(key, value) } }

现在这有它的问题,因为每个动态组件现在都需要负责了解并调用传入的提供项。

解决方案1

解决每个组件需要了解所提供值的方法是创建一个提供值的中间组件。

可提供(中间组件)

 

像这样使用它:

解决方案2

更简洁的解决方案是创建一个包装器组件,类似于 keep-alive 的工作原理。目标组件只需放入默认槽即可。

提供.vue

 

并像这样使用它:

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!