Rendern Sie eine Vue-Komponente dynamisch innerhalb einer anderen Komponente
P粉764003519
2023-08-30 20:51:07
<p>Verwenden von<strong>Vue 3.2.41</strong>-@heroicons/vue 2.0.14-inertiajs 1.0-vite 4.0.0</p>
<p>Ich verwende dies, um die Vue-Komponente aufzurufen: </p>
<p><code><TimelineItem icon="CalendarDaysIcon" /></code></p>
<p>Die Komponente sieht folgendermaßen aus: </p>
<pre class="brush:php;toolbar:false;"><template>
<component :is="icon> <!-- funktioniert nicht -->
<CalendarDaysIcon /> <!-- funktioniert -->
</template>
<Skript-Setup>
importieren {
CalendarDaysIcon,
} von '@heroicons/vue/20/solid'
const props = defineProps(['icon'])
</script></pre>
<p>Der gerenderte HTML-Code sieht folgendermaßen aus:</p>
<pre class="brush:php;toolbar:false;"><calendardaysicon></calendardaysicon>!-- nicht das, was ich will -->
<svg> ... </svg> <!-- korrekt, aber nicht dynamisch --></pre>
<p>Mit anderen Worten, wenn ich möchte, dass <code><component :is /></code> die Komponente rendert, wird nur ein leerer <code><calendardaysicon></code> gerendert ; markieren. Ich kann sehen, dass es in Kleinbuchstaben geändert wurde, und ich weiß nicht, wie ich es wieder auf PascalCase zurücksetzen kann. Ich bin mir nicht einmal sicher, ob das der Situation helfen würde. </p>
<p>Ich habe den Code etwas vereinfacht, aber die Vollversion wird eine Liste mit 10 verschiedenen Symbolen haben (alle Teile des Heroicons-Pakets verwenden PascalCase-Namen) und ich möchte sie einfach von der Hauptkomponente aus aufrufen können .</p>
尝试:
使用
仅使用包含CalendarDaysIcon
的字符串相反,在主组件中,传递实际的组件引用,如下所示:
然后,在
TimelineItem
组件中,不需要引用任何图标:感谢 Inertia Discord 服务器上的
@Robert Boes
的指导。