Recherche…


Remarques

Important! Les emplacements après rendu ne garantissent pas l'ordre des positions pour les emplacements. Slot, qui était le premier, peut avoir une position différente après le rendu.

Utiliser des slots individuels

Les emplacements uniques sont utilisés lorsqu'un composant enfant définit uniquement un slot dans son modèle. Le composant de page ci-dessus utilise un seul emplacement pour distribuer le contenu.

Un exemple de la page du modèle du composant à l' aide d' une seule fente est ci - dessous:

<html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
        <slot>
            This will only be displayed if there is no content
            to be distributed.
        </slot>
    </body>
</html>

Pour illustrer le fonctionnement de la machine à sous, nous pouvons configurer une page comme suit.

<page>
    <p>This content will be displayed within the page component</p>
</page>

Le résultat final sera:

<html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
        <p>This content will be displayed within the page component</p>
    </body>
</html>

Si nous ne mettons rien entre la page par balises INSTEAD avaient <page></page> nous cédons à la place le résultat suivant car il est contenu par défaut entre les slot balises dans la page par modèle des composants.

<html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
        This will only be displayed if there is no content
        to be distributed.
    </body>
</html>

Que sont les slots?

Les emplacements offrent un moyen pratique de distribuer du contenu d'un composant parent à un composant enfant. Ce contenu peut être n'importe quoi, du texte, du HTML ou même d'autres composants.

Il peut être utile parfois de considérer les slots comme un moyen d’injecter du contenu directement dans le modèle d’un composant enfant.

Les emplacements sont particulièrement utiles lorsque la composition du composant sous le composant parent n'est pas toujours la même.

Prenons l'exemple suivant où nous avons un composant de page . Le contenu de la page peut changer selon que cette page affiche par exemple un article, un article de blog ou un formulaire.

Article

<page>
    <article></article>
    <comments></comments>
</page>

Blog Post

<page>
    <blog-post></blog-post>
    <comments></comments>
</page>

Forme

<page>
    <form></form>
</page>

Notez comment le contenu du composant de page peut changer. Si nous n'utilisions pas de slots, cela serait plus difficile car la partie interne du template serait corrigée.

Rappelez-vous: "Tout dans le modèle parent est compilé dans la portée parent; tout dans le modèle enfant est compilé dans la portée enfant."

Utiliser des slots nommés

Les slots nommés fonctionnent de la même manière que les slots simples, mais vous permettent de distribuer du contenu dans différentes régions de votre template de composant enfant.

Prenez le composant page de l'exemple précédent, mais modifiez son modèle pour qu'il soit comme suit:

<html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
        <aside>
            <slot name="sidebar"></slot>
        </aside>
        <main>
            <slot name="content"></slot>
        </main>
    </body>
</html>

Lorsque vous utilisez le composant page , nous pouvons maintenant déterminer où le contenu est placé via l'attribut slot :

<page>
    <p slot="sidebar">This is sidebar content.</p>
    <article slot="content"></article>
</page>

La page résultante sera:

<html>
    <head>
        <title>Page Title</title>
    </head>
    <body>
        <aside>
            <p>This is sidebar content.</p>
        </aside>
        <main>
            <article></article>
        </main>
    </body>
</html>

Si un slot est défini sans attribut de name tout contenu placé dans des balises de composant ne spécifiant pas d'attribut de slot sera placé dans cet emplacement.

Voir l'exemple d' insertion multiple sur les documents officiels de Vue.js.

Utiliser des slots dans Vue JSX avec 'babel-plugin-transform-vue-jsx'

Si vous utilisez VueJS2 et aimez utiliser JSX avec lui. Dans ce cas, pour utiliser le slot, la solution avec exemple est ci-dessous this.$slots.default utiliser this.$slots.default C'est presque comme this.props.children dans React JS.

Component.js:

export default {
    render(h) {  //eslint-disable-line
        return (
            <li>
                 { this.$slots.default }
            </li>
        );
    }
};

ParentComponent.js

import Component from './Component';

export default {
    render(h) {  //eslint-disable-line
        return (
            <ul>
                 <Component>
                     Hello World
                 </Component>
            </ul>
        );
    }
};


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow