Adakah terdapat cara untuk mengisytiharkan peruntukan/suntikan dalam komponen dinamik Vue3 di luar fungsi tetapan hos?
P粉384366923
2023-08-30 09:41:50
<p>Saya sedang mencipta <kod>Komponen Dinamik</kod> dalam <kod>Vue3</kod>. Saya menggunakan <code>v-bind</code> untuk menyediakan <code>props</code>. </p>
<pre class="lang-js prettyprint-override"><code><komponen :is='MyComponent' v-bind='myProps' />
</code></pre>
<p>Saya ingin menyediakan/menyuntik</kod> kefungsian menggunakan <kod>. Bagaimanakah saya boleh meletakkan sifat yang saya sediakan ke dalam komponen dinamik. Komponen dinamik saya memanggil <code>inject</code> dalam fungsi <code>setup</code> </p>
<p>Walaupun ini tidak didokumenkan pada Vue, saya mencubanya tidak berjaya: </p>
<pre class="brush:php;toolbar:false;"><component :is='MyComponent' v-bind='myProps' :provide='myProvidedProps'/></pre>
<p>Malah cuba meletakkan <code>provide</code> objek ke dalam objek <code>props</code> </p>
Selepas menyemak imbas kod sumber Vue3, anda tidak boleh terus
动态组件
指示provide
menyatakannya dalam templat. Ia mesti dipanggil dalam fungsi tetapan atau pilihan induk yang mengehos komponen dinamik, atau dalam tetapan atau pilihan komponen dinamik.Dua pilihan ialah:
provide
pada komponen yang menjadi hos komponen dinamik.Ini tidak berfungsi untuk saya kerana fungsi setter saya dipanggil sebelum komponen dinamik saya diaktifkan, saya juga memerlukan jenis komponen untuk ditetapkan bersama dengan nilai yang disediakan.
Komponen saya
Sekarang ini mempunyai masalahnya, kerana setiap komponen dinamik kini perlu bertanggungjawab untuk memahami dan memanggil pembekal yang masuk.
Penyelesaian 1
Penyelesaian kepada setiap komponen yang perlu mengetahui nilai yang disediakan adalah dengan mencipta komponen perantaraan yang memberikan nilai.
Tersedia (komponen perantaraan)
Gunakannya seperti ini:
Penyelesaian 2
Penyelesaian yang lebih bersih ialah mencipta komponen pembungkus, sama seperti cara keep-alive berfungsi. Komponen sasaran hanya perlu dimasukkan
默认槽
.disediakan.vue
dan gunakannya seperti ini: