有沒有辦法在主機設定函數以外的 Vue3 動態元件中聲明提供/注入?
P粉384366923
2023-08-30 09:41:50
<p>我正在 <code>Vue3</code> 中建立一個<code>動態元件</code>。我使用 <code>v-bind</code> 提供 <code>props</code>。 </p>
<pre class="lang-js prettyprint-override"><code><component :is='MyComponent' v-bind='myProps' />
</code></pre>
<p>我想使用<code>提供/注入</code>功能。如何將我提供的屬性放入動態元件中。我的動態元件在 <code>setup</code> 函數中呼叫 <code>inject</code>,並預期為其子元件<code>提供</code>值。 </p>
<p>雖然這在 Vue 上沒有記錄,但我沒有成功嘗試:</p>
<pre class="brush:php;toolbar:false;"><component :is='MyComponent' v-bind='myProps' :provide='myProvidedProps'/></pre>
<p>甚至嘗試將 <code>provide</code> 物件放入 <code>props</code> 物件中。 </p>
瀏覽 Vue3 原始程式碼後,無法直接在範本中向
動態元件
指示#provide
規格。必須在託管動態元件的父級的設定函數或選項中,或在動態元件的設定或選項中呼叫它。這兩個選項是:
provide
。這對我不起作用,因為我的設定函數在我的動態元件被啟動之前就被呼叫了;我還需要將元件類型和提供的值一起設定。
我的元件
現在這有它的問題,因為每個動態元件現在都需要負責了解並呼叫傳入的提供項。
解決方案1
解決每個元件需要了解所提供值的方法是建立一個提供值的中間元件。
可提供(中間元件)
像這樣使用它:
解決方案2
更簡潔的解決方案是建立一個包裝器元件,類似於 keep-alive 的工作原理。目標元件只需放入
預設槽
即可。提供.vue
並這樣使用它: