recherche

Maison  >  Questions et réponses  >  le corps du texte

Rendre dynamiquement un composant Vue dans un autre composant

<p>Utilisation de<strong>Vue 3.2.41</strong>-@heroicons/vue 2.0.14-inertiajs 1.0-vite 4.0.0</p> <p>J'utilise ceci pour appeler le composant Vue : </p> <p><code><TimelineItem icon="CalendarDaysIcon" /></code></p> <p>Le composant ressemble à ceci : </p> <pre class="brush:php;toolbar:false;"><template> <composant :est="icône" />!-- ne fonctionne pas --> <CalendarDaysIcon /> <!-- fonctionne --> </modèle> <configuration du script> importer { Icône Jours du Calendrier, } de '@heroicons/vue/20/solid' const props = définirProps(['icône']) </script></pre> <p>Le code HTML rendu ressemble à ceci :</p> <pre class="brush:php;toolbar:false;"><calendardaysicon></calendardaysicon> <!-- pas ce que je veux --> <svg> ... </svg> <!-- correct mais pas dynamique --></pre> <p>En d'autres termes, lorsque je veux que <code><component :is /></code> restitue le composant, il restitue simplement un <code><calendardaysicon></code> ; marque. Je peux voir qu'il l'a changé en minuscules et je ne sais pas comment le forcer à revenir à PascalCase, je ne suis même pas sûr que cela aiderait la situation. </p> <p>J'ai un peu simplifié le code, mais la version complète aura une liste de 10 icônes différentes (toutes les parties du package Heroicons utilisant les noms PascalCase) et je veux pouvoir les appeler facilement à partir du composant principal .≪/p>
P粉764003519P粉764003519455 Il y a quelques jours550

répondre à tous(2)je répondrai

  • P粉697408921

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

    Essayez :

    répondre
    0
  • P粉107772015

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

    Utilisez 仅使用包含CalendarDaysIcon cordes

    Au lieu de cela, dans le composant principal, transmettez la référence réelle du composant comme ceci :

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

    Ensuite, dans le composant TimelineItem, il n'est pas nécessaire de référencer une quelconque icône :

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

    Merci à @Robert Boes sur le serveur Inertia Discord pour les conseils.

    répondre
    0
  • Annulerrépondre