Ausführliche Erklärung zu Slots und Filtern in Vue

Ausführliche Erklärung zu Slots und Filtern in Vue

Spielautomaten

Was sind Slots?

Konzept

Vue implementiert eine Reihe von APIs zur Inhaltsverteilung und stellt ein <slot>-Element für Komponenten als Schnittstelle zum Übertragen verteilter Inhalte bereit.

Einfach ausgedrückt dient das <slot>-Element als Steckplatz für die Inhaltsverteilung in einer Komponentenvorlage. Das <slot>-Element selbst wird ersetzt.

Slot-Inhalte

Grammatik

Erstellen Sie zunächst eine neue Datei, um unseren Slot zu schreiben

// Steckplatz.vue

<Vorlage>
  <div>
    <div>
      <!--Der Inhalt der Verteilung wird an diese Slot-Tag-Position übertragen-->
      <Steckplatz></Steckplatz>
    </div>
    <p>Konto: <input /></p>
    <p>Passwort: <input type="password" /></p>
    <button>Anmelden</button>
  </div>
</Vorlage>

<Skript>
Standard exportieren {};
</Skript>

<Stil>
</Stil>

Dann verwenden wir es in einer anderen Komponente (SlotTest)

// SlotTest.vue

<Vorlage>
  <div>
    <slotCom>
        <h2>Ich bin der Inhalt, der an den Slot verteilt wird</h2>
    </slotCom>
  </div>
</Vorlage>

<Skript>
// Importieren Sie „import slotCom“ von „../views/slot“;

Standard exportieren {
  Komponenten:
    slotCom
  },
}
</Skript>

<Stil>
</Stil>

Aus dem Effektdiagramm (unten) können wir ersehen, dass der Satz im h2-Tag auf der Seite gerendert wurde und die Tag-Position auch dem Tag in der Datei slot.vue entspricht.

Beachten

Wenn die <SlotTest>-Vorlage kein <slot>-Element enthält, wird jeglicher Inhalt innerhalb der Symmetrie-Tags der Komponente verworfen.

Kompilierungsbereich

Wenn Sie Daten in einem Slot verwenden möchten, beispielsweise:

<navigation-link url="/profil">
  Angemeldet als {{ user.name }}
</navigation-link>

Der Slot hat Zugriff auf dieselben Instanzeigenschaften (und daher denselben „Bereich“) wie der Rest der Vorlage, jedoch nicht auf den Bereich des <navigation-link>. Beispielsweise ist die URL nicht zugänglich:

<navigation-link url="/profil">
  Wenn Sie hier klicken, werden Sie weitergeleitet zu: {{ url }}

  /* „URL“ ist hier undefiniert, da ihr Inhalt an den <Navigationslink> _übergeben_ wird und nicht *innerhalb* der <Navigationslink>-Komponente definiert ist.
  */
</navigation-link>

Denken Sie grundsätzlich daran:

Der gesamte Inhalt der übergeordneten Vorlage wird im übergeordneten Bereich kompiliert; der gesamte Inhalt der untergeordneten Vorlage wird im untergeordneten Bereich kompiliert.

Fallback-Inhalte

Mit dem <slot>-Element können Sie Fallback-Inhalte festlegen. Wenn in das Symmetrie-Tag der aktuellen Komponente kein Inhalt eingefügt wird, rendert die Komponente schließlich den Fallback-Inhalt. Einfach ausgedrückt entspricht es dem Standardwert des Steckplatzes.
Beispiel

// Eine Schaltflächenkomponente. Legen Sie den Fallback-Inhalt auf Text „Senden“ fest.
<button type="senden">
  <slot>Senden</slot>
</button>

// Wenn ich <Submit-Button> in einer übergeordneten Komponente verwende und keinen Slot-Inhalt angebe:
<Senden-Schaltfläche></Senden-Schaltfläche>

// Der Fallback-Inhalt „Senden“ wird gerendert:
<button type="senden">
  Einreichen
</button>

// Aber wenn wir Inhalte bereitstellen:
<Senden-Schaltfläche>
  Speichern
</Absenden-Schaltfläche>

// dann wird der bereitgestellte Inhalt anstelle des Fallback-Inhalts gerendert:
<button type="senden">
  Speichern
</button>

Benannte Slots

Konzept Manchmal benötigen unsere Komponenten mehr als einen Steckplatz. Verschiedene Komponenten können in verschiedene Slots eingefügt werden. Dies geschieht durch die Verwendung benannter Slots und das Festlegen eines Namensattributs für das <slot>-Element in der Komponente. Wenn wir einem benannten Slot Inhalt bereitstellen, können wir die v-slot-Direktive für ein <template>-Element verwenden, um den entsprechenden Inhalt in das angegebene <slot>-Element einzufügen.

Grammatik

// Login-Komponente.vue

<Vorlage>
    <div>
        <div>
            <slot>Inhalt sichern</slot>
        </div>
        <p>
            Konto: <slot name="user"></slot>
        </p>
        <p>
            Passwort: <slot name="psd"></slot>
        </p>

        <button>Anmelden</button>
        <Steckplatz></Steckplatz>
    </div>
</Vorlage>

// Verwenden von <login-component>
        <h2>Ich bin der Inhalt, der an den Slot verteilt wird</h2>

        <Vorlage v-slot:Benutzer>    
            <!-- Der gesamte Inhalt hier wird in den Slot name="user" eingefügt-->
            <div>
                123
            </div>
        </Vorlage>


        <input slot="psd" type="password" placeholder="Dieses Element wird in den name=psd-Slot eingefügt">
        <Komponente-a slot="psd"></Komponente-a> 

</Anmeldekomponente>

Beachten

Wie v-on und v-bind hat v-slot eine Abkürzung, die darin besteht, alles vor dem Parameter (v-slot:) durch das Zeichen # zu ersetzen. Beispielsweise kann v-slot:header als #header umgeschrieben werden.

<Anmeldekomponente>
            <h2>Ich bin der Inhalt, der an den Slot verteilt wird</h2>

            <Vorlage #Benutzer>    
                Der gesamte Inhalt hier wird in den Slot name="user" <div> eingefügt.
                    123
                </div>
            </Vorlage>


            <Vorlage #psd>    
               <input type="password" placeholder="Dieses Element wird in den name=psd-Slot eingefügt">
            </Vorlage>
</Anmeldekomponente>

Ich persönlich denke, dass Slots bei der Projektentwicklung nicht häufig verwendet werden und häufig bei der Entwicklung einiger UI-Bibliotheken verwendet werden. Wenn Sie ein tieferes Verständnis von Slots erlangen möchten, können Sie das offizielle Dokument cn.vuejs.org/v2/guide/co… zu Rate ziehen.

Filter

Konzept

Vue.js ermöglicht es Ihnen, Ihre eigenen Filter zu definieren, die für einige gängige Textformatierungen verwendet werden können. Filter können an zwei Stellen verwendet werden: Interpolation mit doppelten geschweiften Klammern und V-Bind-Ausdrücken (letzteres wird seit 2.1.0+ unterstützt). Filter sollten am Ende des JavaScript-Ausdrucks hinzugefügt werden, gekennzeichnet durch das Symbol „|“:

Grammatik

Filter unterstützt globale Filter oder lokale Filter

Globale Filter

<div id="app">
    {{str | capitalize}} // Hallo
</div>

// Den ersten Buchstaben des Wortes groß schreiben Vue.filter('capitalize', function (value) {
  wenn (!Wert) return ''
  Wert = Wert.toString()
  Rückgabewert.charAt(0).toUpperCase() + Wert.slice(1)
})

neuer Vue({
    el: '#app',
    Daten: {
        str: 'hallo'
    }
})

Lokaler Filter

<div id="app">
    <div v-for="(f,i) in Freunde" :key="i">
        <h3>Name: {{f.name}} </h2>
        <p>Alter: {{f.age}}</p>
        <p>Geschlecht: {{f.sex|getSex}}</p>
    </div>
</div>

<Skript>
    neuer Vue({
        el: '#app',
        Daten: {
            Freunde: [{
                    Name: 'Max',
                    Geschlecht: 0,
                    Alter: 19
                },
                {
                    Name: 'Jack',
                    Geschlecht: 1,
                    Alter: 22
                },
                {
                    Name: 'Jacose',
                    Geschlecht: 1,
                    Alter: 19
                },
                {
                    Name: 'Tim',
                    Geschlecht: 1,
                    Alter: 18
                },
                {
                    Name: 'Jimmy',
                    Geschlecht: 0,
                    Alter: 20
                },
                {
                    Name: 'Tom',
                    Geschlecht: 0,
                    Alter: 19
                },
            ]
        },
        Filter:
            getSex(Typ) {
                wenn (Typ === 0) {
                    returniere 'männlich'
                }
                returniere 'weiblich'
            }
        }
    })
</Skript>

Hinweis: Filter unterstützt die Übergabe mehrerer Parameter. Die direkt an substr übergebenen Parameter werden nacheinander als zweiter, dritter usw. Parameter der Filtermethode verwendet.

<div>{{'hallo' | substr(3,4)}}</div>
<Skript>
{
    Filter:
       substr(str,Start,Ende) {
           gibt str.substr(Start, Ende) zurück
       } 
    }
}
</Skript>

üben

Implementieren Sie einen Filter, der die Zeit der entsprechenden Struktur gemäß der angegebenen Vorlage zurückgeben kann.

// Beispiel <p>{1599639292100 | getTemplateTimeByDate('YYYY-MM-dd hh:mm:ss')}</p> -> 2020-09-09 15:04:56

<p>{1599639292100 | getTemplateTimeByDate('JJJJ-Md h:m:s')}</p> -> 2020-9-9 15:4:6
<p>{1599639292100 | getTemplateTimeByDate('JJJJ Jahr M Monat d Tag hh:mm')}</p> -> 9. September 2020, 15:04 Uhr

neuer Vue({
    el: '#app',
    Daten: {
        Datum: neues Date().getTime()
    },
    Filter:
        getTemplateTimeByDate(Datum, Vorlage) {
            Datum = neues Datum(Datum)

            lass ZeitObj = {
                'J+': date.getFullYear(),
                '(M+)': date.getMonth() + 1,
                '(d+)': Datum.getDate(),
                '(h+)': date.getHours(),
                '(m+)': date.getMinutes(),
                '(s+)': date.getSeconds()
            }

            für (Schlüssel in TimeObj) {
                let reg = neuer RegExp(Schlüssel)

                wenn (reg.test(Vorlage)) {
                    Konsole.log(RegExp.$1)
                    let Zeit = TimeObj[Schlüssel]
                    // Bestimmen Sie, ob die aktuelle Vorlagenzeit zweistellig oder einstellig ist. // Wenn es sich um eine zweistellige Zeit handelt, fügen Sie vorne eine Null hinzu, 1 -> 01 
                    // Wenn es eine Ziffer ist, muss keine Null hinzugefügt werden if (RegExp.$1.length > 1) {

                        Zeit = Zeit >= 10 ? Zeit : '0' + Zeit
                    }
                    Vorlage = Vorlage.ersetzen(reg, Zeit)
                }
            }
            Rückgabevorlage
        }
    }
})
</Skript>

Zusammenfassen

Dies ist das Ende dieses Artikels über Slots und Filter in Vue. Weitere relevante Inhalte zu Vue-Slots und -Filtern finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Einführung und Verwendung von Slots in Vue
  • Detaillierte Erklärung der Verwendung von Vue-Komponenten-Slots und des Aufrufens von Methoden innerhalb von Komponenten
  • Vue-Slots verstehen und verwenden
  • Detaillierte Erklärung des Prinzips und der Verwendung von Vue-Slots
  • $slot in vue ruft die Knoteninstanz des Slots ab
  • Detaillierte Erklärung zur Verwendung des Vue-Slots
  • Vue.js muss jeden Tag Filter und benutzerdefinierte Filter lernen
  • Vue-Filter und grundlegende Verwendung
  • Vue.js – Zusammenfassung der Filterverwendung

<<:  Detailliertes Installations- und Konfigurationstutorial von MySQL 5.7 unter Win10

>>:  Detaillierte Erklärung, wie Zabbix den Master-Slave-Status von MySQL überwacht

Artikel empfehlen

Warum sollte CSS im Head-Tag platziert werden?

Denken Sie darüber nach: Warum sollte css im head...

So zeigen Sie den Speicherort von MySQL-Datendateien an

Wir haben möglicherweise eine Frage: Nachdem wir ...

So beheben Sie das Timeout während des Pip-Vorgangs in Linux

So lösen Sie das Timeout-Problem, wenn Pip in Lin...

MySQL 8.0.19 Installations- und Konfigurations-Tutorial unter Windows 10

Ich werde nächstes Semester MySQL lernen. Ich hab...

Vertikales und horizontales Aufteilen von MySQL-Tabellen

Vertikale Teilung Vertikale Aufteilung bezieht si...

Zusammenfassung der Tipps zum Erstellen von Webseiten

Vorwort Dieser Artikel fasst hauptsächlich einige...

Zwei einfache Beispiele für Menünavigationsleisten

Menüleiste Beispiel 1: Code kopieren Der Code lau...

Beispiel für die Installation von nginx in einem angegebenen Verzeichnis

Aufgrund von Unternehmensanforderungen müssen zwe...