Modèle de composant doit contenir exactement un élément racine. Si vous êtes à l'aide de v-si sur plusieurs éléments, utilisez les touches v-sinon-si de la chaîne d'eux à la place.
La bonne approche est
<template>
<div> <!-- The root -->
<p></p>
<p></p>
</div>
</template>
La mauvaise approche
<template> <!-- No root Element -->
<p></p>
<p></p>
</template>
Multi Composants De Racine
Le moyen de contourner le problème est d'utiliser des composants fonctionnels, ils sont des composants où vous devez passer les pas de réactif de données composant ne sera pas regarder pour toute modification des données ainsi que de ne pas mettre à jour elle-même quand quelque chose dans le composant parent changements.
Comme c'est un travail autour de il vient avec un prix, composants fonctionnels n'ont pas de cycle de vie des crochets passé, ils sont en instance moins aussi bien que vous ne peut pas se référer this
de plus et tout est passé avec le contexte.
Voici comment vous pouvez créer une simple composante fonctionnelle.
Vue.component('my-component', {
// you must set functional as true
functional: true,
// Props are optional
props: {
// ...
},
// To compensate for the lack of an instance,
// we are now provided a 2nd context argument.
render: function (createElement, context) {
// ...
}
})
Maintenant que nous avons couvert les composants fonctionnels de détail permet de couvrir comment créer des composants de racine, pour cela je vais vous présenter un exemple générique.
<template>
<ul>
<NavBarRoutes :routes="persistentNavRoutes"/>
<NavBarRoutes v-if="loggedIn" :routes="loggedInNavRoutes" />
<NavBarRoutes v-else :routes="loggedOutNavRoutes" />
</ul>
</template>
Maintenant, si nous prenons un coup d'oeil à NavBarRoutes modèle
<template>
<li
v-for="route in routes"
:key="route.name"
>
<router-link :to="route">
{{ route.title }}
</router-link>
</li>
</template>
Nous ne pouvons pas faire quelque chose comme cela, nous allons violer seul composant racine de restriction
Solution
Faire de cette composante fonctionnelle et l'utilisation de rendu
{
functional: true,
render(h, { props }) {
return props.routes.map(route =>
<li key={route.name}>
<router-link to={route}>
{route.title}
</router-link>
</li>
)
}
Ici vous avez vous avez créé un multi composant racine, Heureux de codage
Référence pour plus de détails, visitez: https://blog.carbonteq.com/vuejs-create-multi-root-components/