Einfache Schritte zum Kapseln von Komponenten in Vue-Projekten

Einfache Schritte zum Kapseln von Komponenten in Vue-Projekten

Vorwort

Mit der Entwicklung unseres Geschäfts kann die Funktionsentwicklung unsere Anforderungen an das Frontend nicht mehr erfüllen. Dieser Artikel zeigt Ihnen hauptsächlich, wie Sie Ihre eigene Komponentenbibliothek entwickeln.

Anwendungsszenarien: Entwicklung interner Komponentenbibliotheken, Entwicklung persönlicher Komponentenbibliotheken, Entkopplung von Projekten, Verwendung derselben Komponente in mehreren Projekten und Pflege nur eines Satzes von Komponentenbibliotheken erforderlich

So kapseln Sie eine Toast-Komponente

Komponentenbeschreibung:

Implementieren Sie die Prompt-Funktion.

Effektanzeige:

Implementierte Funktionen:

  • Abhängig von einer bestimmten Beurteilungsbedingung oder durch Klicken auf eine Schaltfläche wird ein Popup-Fenster angezeigt.
  • Konfigurierbare Position, Typ, Stilname usw.

Anwendungsfälle

1. Einfach zu bedienen

vm.$toast('Netzwerkstörung!')

2. Verwenden Sie den Optionsparameter

* Nachricht: Inhalt der Eingabeaufforderung* Dauer: Verweildauer in Millisekunden* Position: Anzeigeposition: oben, Mitte, unten
* Klassenname Stilname vm.$toast({
    Meldung: ,Netzwerkanomalie!‘ ',
    Dauer: 2000,
    Position: 'Mitte',
    Klassenname: "groß"
})

3. Fehlermeldung

vm.$toast({
    Meldung: ‚Fehler beim Bestätigungscode! ',
    Dauer: 2000,
    Typ: "Fehler"
})

Konkrete Umsetzung

Erster Toast.vue

<Vorlage>
    <Übergangsname="Toast-Pop">
        <div v-show="sichtbar" class="toast" :class="customClass" @click="handleClose">
            <span class="text">{{Nachricht}}</span>
        </div>
    </Übergang>
</Vorlage>

<Skript>
    Standard exportieren {
        Name: 'Toast',
        Requisiten: {
            Nachricht: String, // Eingabeaufforderungsinformationen Inhalt Klassenname: { // Stilname Typ: String,
                Standard: ''
            },
            position: { // Position: oben, Mitte, unten
                Typ: Zeichenfolge,
                Standard: „Mitte“
            },
            Typ: { // Eingabeaufforderungstyp: normal, Fehler
                Typ: Zeichenfolge,
                Standard: „normal“
            }
        },
        Daten () {
            zurückkehren {
                // Ob sichtbar angezeigt werden soll: false
            }
        },
        berechnet: {
            // Stil customClass abrufen () {
                let Klassen = []
                Klassen.push('Toast-' + dieser.Typ)
                Schalter (diese.Position) {
                    Fall 'oben':
                        Klassen.push('ist-placetop')
                        brechen
                    Fall 'unten':
                        Klassen.push('ist-Placebottom')
                        brechen
                    Standard:
                        Klassen.push('ist-placemiddle')
                }
                dieser.Klassenname && Klassen.push(dieser.Klassenname)
                Rückgabeklassen
            }
        },
        Methoden: {
            handleSchließen () {
                dies.$emit('schließen')
            }
        }
    }

</Skript>

<style lang="scss" scoped px2rem="false">
    .toast {
        Position: fest;
        Box-Größe: Rahmenbox;
        Mindestbreite: 200px;
        maximale Breite: 50 %;
        max. Höhe: 85 %;
        Rand oben: 0;
        Polsterung: 18px 30px;
        Rahmenradius: 10px;
        Hintergrund: rgba(0, 0, 0, 0,7);
        Farbe: #fff;
        Textausrichtung: zentriert;
        Überlauf-y: automatisch;
        Z-Index: 2000;
        .text {
            Anzeige: Block;
            Schriftgröße: 16px;
            Zeilenhöhe: 1,5;
            Textausrichtung: zentriert;
            Zeilenumbruch: Wort umbrechen;
        }
    }

    .ist-placetop {
        oben: 50px;
        links: 50%;
        transformieren: übersetzen(-50 %, 0);
    }
    .ist-placemiddle {
        oben: 50 %;
        links: 50%;
        transformieren: übersetzen(-50 %, -50 %);
    }
    .ist-placebottom {
        unten: 50px;
        links: 50%;
        transformieren: übersetzen(-50 %, 0);
    }
    .ist-placetop.toast-pop-enter-active, .ist-placetop.toast-pop-leave-active,
    .is-placemiddle.toast-pop-enter-active, .is-placemiddle.toast-pop-leave-active {
        Übergang: Deckkraft 0,3 s linear, oberer Rand 0,3 s Leichtigkeit;
    }

    .ist-placetop.toast-pop-enter, .ist-placetop.toast-pop-leave-to,
    .is-placemiddle.toast-pop-enter, .is-placemiddle.toast-pop-leave-to {
        Rand oben: 30px;
        Deckkraft: 0;
    }
    .is-placebottom.toast-pop-enter-active, .is-placebottom.toast-pop-leave-active {
        Übergang: Deckkraft 0,3 s linear, Rand unten 0,3 s Leichtigkeit;
    }

    .is-placebottom.toast-pop-enter, .is-placebottom.toast-pop-leave-to {
        Rand unten: -30px;
        Deckkraft: 0;
    }
    .toast-Fehler {
        Hintergrund: rgba(255,102,104,.9);
    }
</Stil>

toastPlugin.js

Vue von „vue“ importieren
Toast aus „./toast.vue“ importieren

// Toast-Konstruktor const ToastConstructor = Vue.extend({
    erweitert: Toast
})

// Toast-Instanzpool let toastPool = []

/** Toast-Instanz holen (wenn eine im Instanzpool vorhanden ist, diese aus dem Pool nehmen, wenn keine vorhanden ist, eine neue erstellen) */
let getInstance = () => {
    // konsole.log('toastPool:', toastPool)
    wenn (toastPool.length > 0) {
        toastPool.shift() zurückgeben
    }
    returniere neuen ToastConstructor({
        el: document.createElement('div')
    })
}

/** Die Instanz an den Instanzpool zurückgeben */
let returnInstance = Instanz => {
    wenn (Instanz) {
        toastPool.push(Instanz)
        // console.log('Instanz zurückgeben:', Instanz, ToastPool)
    }
}

/**Entfernen Sie den DOM-Knoten von Toast aus dem Dokument*/
Funktion removeDom (Ereignis) {
    wenn (Ereignis.Ziel.übergeordneterKnoten) {
        Ereignis.Ziel.ParentNode.RemoveChild(Ereignis.Ziel)
    }
}

// Schließen ToastConstructor.prototype.close = function () {
    this.visible = false // Unsichtbar this.closed = true // Geschlossener Zustand this.$el.addEventListener('transitionend', removeDom) // Entferne den DOM-Knoten, nachdem die Animation abgeschlossen ist returnInstance(this) // Das Instanzobjekt wird an den Instanzpool zurückgegeben und die Instanz kann wiederverwendet werden }

// Toast-Eingabeaufforderungsinformationen anzeigen export default function (options = {}) {
    // Anzeigedauer, Standard ist 3 Sekunden let duration = options.duration || 3000
    let Instanz = getInstance()
    // console.log('Instanz=', Instanz)
    // Anzeigetyp Instanztyp = Optionentyp || 'normal'
    // Inhalt anzeigen instance.message = typeof options === 'string' ? options : options.message
    // Anzeigeposition: oben, Mitte, unten
    Instanz.position = Optionen.position || 'Mitte'
    Instanz.Klassenname = Optionen.Klassenname || ''
    //Entfernen Sie die Eventinstanz zur Beendigung der Animation.$el.removeEventListener('transitionend', removeDom)
    Instanz.$on('close', () => {
        Instanz.schließen()
    })
    // konsole.log('instanz.$el=', Instanz.$el)
    // Fügen Sie den Knoten zum Dokument hinzu. document.body.appendChild(instance.$el)
    Instanz.sichtbar = true
    Instanz.geschlossen = falsch

    // Lösche den Timer instance.timer && clearTimeout(instance.timer)
    // Stellen Sie den Timer ein und schließen Sie den Toast
    Instanz.Timer = setTimeout(() => {
        // console.log('schließen', Instanz)
        !Instanz.geschlossen && Instanz.schließen()
        Instanz.Timer = null
    }, Dauer)
}

Haupt-JS

ToastPlugin aus „./plugins/toastPlugin.js“ importieren

// Plugin für Toast-Eingabeaufforderungsinformationen Vue.use(ToastPlugin)

Zusammenfassen

Dies ist das Ende dieses Artikels über die Kapselung von Komponenten in Vue-Projekten. Weitere relevante Inhalte zu Kapselungskomponenten in Vue-Projekten finden Sie in früheren Artikeln auf 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:
  • Umsetzung der Regionalisierung und Komponentenkapselung von Vuejs-Seiten
  • Benutzerdefinierte Komponentenmethode für Vue2.0 (Kapselung von Vue-Komponenten)
  • Grundlegende Schritte zur Vue-Kapselungskomponente in der JS-Version

<<:  So installieren Sie den Kibana-Tokenizer im Docker-Container

>>:  So installieren und implementieren Sie MySQL 8.0 unter CentOS8

Artikel empfehlen

Details zum MySQL-Datentyp

Inhaltsverzeichnis 1. Numerischer Typ 1.1 Klassif...

Lösung für das Timeout-Problem der SNMP4J-Serververbindung

Als Verwaltungszentrale und Server dient dabei un...

So verwenden Sie das Marquee-Tag im XHTML-Code

Im Forum habe ich gesehen, dass der Internetnutzer...

Beispiel für das Erstellen eines virtuellen Hosts basierend auf dem Apache-Port

Apache: Virtuellen Host basierend auf Port erstel...

Detaillierte Erklärung der Listendarstellung von Vue

Inhaltsverzeichnis 1. v-for: Array-Inhalte durchl...

Implementierungsbeispiel für die Message Board-Funktion von Node.js+Express

Inhaltsverzeichnis Nachrichtenbrett Erforderliche...

MySQL MSI Installations-Tutorial unter Windows 10 mit Bildern und Text

1. Herunterladen 1. Klicken Sie auf den neuesten ...