Rendre dynamiquement un composant Vue dans un autre composant
P粉764003519
P粉764003519 2023-08-30 20:51:07
0
2
573
<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粉764003519
P粉764003519

répondre à tous(2)
P粉697408921

Essayez :

P粉107772015

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal