Gibt es eine Möglichkeit, die Bereitstellung/Injektion in einer dynamischen Vue3-Komponente außerhalb der Host-Einstellungsfunktion zu deklarieren?
P粉384366923
2023-08-30 09:41:50
<p>Ich erstelle eine <code>Dynamische Komponente</code> in <code>Vue3</code>. Ich verwende <code>v-bind</code>, um <code>props</code> bereitzustellen. </p>
<pre class="lang-js Prettyprint-override"><code><component :is='MyComponent' v-bind='myProps' />
</code></pre>
<p>Ich möchte mit <code> Funktionalität bereitstellen/einbinden. Wie kann ich die von mir bereitgestellten Eigenschaften in die dynamische Komponente einfügen? Meine dynamische Komponente ruft <code>inject</code> in der Funktion <code>setup</code> auf und erwartet einen </code>-Wert für ihre untergeordnete Komponente. </p>
<p>Obwohl dies auf Vue nicht dokumentiert ist, habe ich es erfolglos versucht: </p>
<pre class="brush:php;toolbar:false;"><component :is='MyComponent' v-bind='myProps' :provide='myProvidedProps'/></pre>
<p>Ich habe sogar versucht, das <code>provide</code>-Objekt in das <code>props</code>-Objekt einzufügen. </p>
浏览完 Vue3 源代码后,无法直接在模板中向
动态组件
指示provide
规范。必须在托管动态组件的父级的设置函数或选项中,或者在动态组件的设置或选项中调用它。这两个选项是:
provide
。这对我不起作用,因为我的设置函数在我的动态组件被激活之前就被调用了;我还需要将组件类型和提供的值一起设置。
我的组件
现在这有它的问题,因为每个动态组件现在都需要负责了解并调用传入的提供项。
解决方案1
解决每个组件需要了解所提供值的方法是创建一个提供值的中间组件。
可提供(中间组件)
像这样使用它:
解决方案2
更简洁的解决方案是创建一个包装器组件,类似于 keep-alive 的工作原理。目标组件只需放入
默认槽
即可。提供.vue
并像这样使用它: