suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Rendern Sie eine Vue-Komponente dynamisch innerhalb einer anderen Komponente

<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>
P粉764003519P粉764003519451 Tage vor541

Antworte allen(2)Ich werde antworten

  • P粉697408921

    P粉6974089212023-08-31 16:55:02

    尝试:

    Antwort
    0
  • P粉107772015

    P粉1077720152023-08-31 12:44:09

    使用仅使用包含CalendarDaysIcon的字符串

    相反,在主组件中,传递实际的组件引用,如下所示:

    <template>
      <TimelineItem :icon="CalendarDaysIcon" />
    </template>
    
    <script setup>
        import {
            CalendarDaysIcon,
        } from '@heroicons/vue/20/solid'
    
        const props = defineProps(['icon'])
    </script>

    然后,在TimelineItem组件中,不需要引用任何图标:

    <template>
        <component :is="icon" /> <!-- now works -->
    </template>
    
    <script setup>
        const props = defineProps(['icon'])
    </script>

    感谢 Inertia Discord 服务器上的 @Robert Boes 的指导。

    Antwort
    0
  • StornierenAntwort