Suche…


Bemerkungen

Wichtig! Slots nach Render garantieren keine Reihenfolge der Positionen für Slots. Slot, der erste, hat nach dem Rendern möglicherweise eine andere Position.

Einzelne Slots verwenden

Einzelne Steckplätze werden verwendet, wenn eine untergeordnete Komponente nur einen slot in ihrer Vorlage definiert. Die obige page verwendet einen einzelnen Slot zum Verteilen von Inhalt.

Nachfolgend finden Sie ein Beispiel für die Vorlage der page , die einen einzelnen Steckplatz verwendet:

<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>

Um zu zeigen, wie der Slot funktioniert, können wir eine Seite wie folgt einrichten.

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

Das Endergebnis wird sein:

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

Wenn wir nichts zwischen die page stattdessen <page></page> , würden wir stattdessen das folgende Ergebnis liefern, da zwischen den slot Tags in der page Standardinhalt vorhanden ist.

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

Was sind Slots?

Slots bieten eine bequeme Möglichkeit, Inhalte von einer übergeordneten Komponente an eine untergeordnete Komponente zu verteilen. Dieser Inhalt kann aus Text, HTML oder anderen Komponenten bestehen.

Es kann manchmal hilfreich sein, sich Slots als ein Mittel vorzustellen, mit dem Inhalt direkt in die Vorlage einer untergeordneten Komponente eingefügt werden kann.

Slots sind besonders nützlich, wenn die Komponentenzusammensetzung unter der übergeordneten Komponente nicht immer gleich ist.

Nehmen wir das folgende Beispiel, wo wir eine page . Der Inhalt der Seite kann sich abhängig davon ändern, ob auf dieser Seite ein Artikel, ein Blogbeitrag oder ein Formular angezeigt wird.

Artikel

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

Blogeintrag

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

Bilden

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

Beachten Sie, wie sich der Inhalt der page ändern kann. Wenn wir keine Slots verwenden würden, wäre dies schwieriger, da der innere Teil der Vorlage repariert würde.

Denken Sie daran: "Alles in der übergeordneten Vorlage wird im übergeordneten Bereich kompiliert. Alles in der untergeordneten Vorlage wird im untergeordneten Bereich kompiliert."

Benannte Slots verwenden

Benannte Slots funktionieren ähnlich wie einzelne Slots. Sie können stattdessen Inhalte in verschiedenen Bereichen innerhalb Ihrer untergeordneten Komponentenvorlage verteilen.

Nehmen Sie die page aus dem vorherigen Beispiel, ändern Sie die Vorlage jedoch wie folgt:

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

Bei Verwendung der page können wir nun über das slot Attribut bestimmen, wo der Inhalt platziert wird:

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

Die resultierende Seite wird sein:

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

Wenn ein slot ohne definiert ist name - Attribut dann alle Inhalte , die innerhalb Komponente Tags platziert ist kein Spezifizierungs slot Attribut wird in diesem Schlitz angeordnet werden.

Siehe das Beispiel für die Mehrfacheinfügung in den offiziellen Dokumenten von Vue.js.

Slots in Vue JSX mit 'babel-plugin-transform-vue-jsx' verwenden

Wenn Sie VueJS2 verwenden und JSX zusammen damit verwenden möchten. In diesem Fall den Schlitz zu verwenden, die Lösung mit Beispiel ist below.We verwenden hat this.$slots.default Es ist fast wie this.props.children in JS React.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow