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

js behandelt die Kontoabmeldung beim Schließen des Browsers

Inhaltsverzeichnis Klassischer Ansatz Frage Weite...

Beispielcode für die programmgesteuerte Verarbeitung von CSS-Stilen

Vorteile eines programmatischen Ansatzes 1. Globa...

Detaillierte Erläuterung der Laderegeln der require-Methode in node.js

Laderegeln der Require-Methode Laden aus dem Cach...

Analyse der Nutzungsszenarien und Konfigurationsmethoden von Nginx Rewrite

Nginx Rewrite-Nutzungsszenarien 1. Sprung der URL...

Einführung in die grundlegenden TypeScript-Typen

Inhaltsverzeichnis 1. Grundtypen 2. Objekttyp 2.1...

Lassen Sie uns ausführlich über den Vue-Lebenszyklus sprechen

Inhaltsverzeichnis Vorwort 1. Lebenszyklus in Vue...

Ausführliche Erklärung zu Sitzung und Cookie in Tomcat

Vorwort HTTP ist ein zustandsloses Kommunikations...

Implementierungsideen für die Synchronisierung von Docker-Registry-Images

Einleitung Bisher wurden unsere Docker-Images in ...

Was ist Nginx-Lastausgleich und wie wird er konfiguriert?

Was ist Lastenausgleich? Der Lastausgleich wird h...

Erfahrung im Selbststudium von CSS-Optimierungsfähigkeiten

1. Verwenden Sie CSS-Sprites. Der Vorteil besteht ...

PHP geplante Backup MySQL und mysqldump Syntax-Parameter detailliert

Lassen Sie uns zunächst einige gängige Anwendungs...