1. Was ist eine Richtlinie?Beim Erlernen von Vue werden Sie definitiv mit Anweisungen in Berührung kommen. Was also sind Anweisungen? Vue bietet einige praktischere Ausgaben für Seiten und Daten. Diese Operationen werden als Anweisungen bezeichnet und durch v-xxx dargestellt, wie z. B. das Attribut <div v-xxx ></div> auf der HTML-Seite. In Angular werden Befehle, die mit ng-xxx beginnen, beispielsweise als Anweisungen bezeichnet. Der Befehl kapselt einige DOM-Verhaltensweisen, kombiniert mit Attributen als Code, der Code hat einen entsprechenden Wert und entsprechend den unterschiedlichen Werten werden die relevanten DOM-Operationen gebunden, d. h. einige Vorlagenoperationen können ausgeführt werden. Einige häufig verwendete integrierte v-Direktiven in vue
Vergleich zwischen v-if und v-show
Im Allgemeinen sind die Umschaltkosten bei v-if höher, während die anfänglichen Renderkosten bei v-show höher sind. Wenn daher sehr häufiges Umschalten erforderlich ist, ist es besser, v-show zu verwenden, und wenn sich die Bedingungen während der Laufzeit selten ändern, ist es besser, v-if zu verwenden. Im eigentlichen Entwicklungsprozess erfüllen diese integrierten Anweisungen möglicherweise nicht alle Anforderungen, oder Sie möchten den Elementen einige spezielle Funktionen hinzufügen. Zu diesem Zeitpunkt müssen wir die leistungsstarke und flexible Funktion „Benutzerdefinierte Anweisungen“ von Vue verwenden. In der offiziellen API-Dokumentation gibt es einen solchen Satz: Benutzerdefinierte Anweisungen werden verwendet, um Low-Level-Operationen an gewöhnlichen DOM-Elementen durchzuführen. Das heißt, das Problem, das durch benutzerdefinierte Anweisungen gelöst wird, bzw. das Anwendungsszenario besteht darin, Operationen auf niedriger Ebene an gewöhnlichen DOM-Elementen durchzuführen, sodass wir benutzerdefinierte Anweisungen nicht blind verwenden können. 2. Hook-Funktion für benutzerdefinierte AnweisungenVue bietet 5 Hook-Funktionen für benutzerdefinierte Anweisungen:
Beachten: 1. Mit Ausnahme der Hook-Funktionen update und componentUpdated enthält jede Hook-Funktion drei Parameter: el, binding und vnode 2. In jeder Funktion ist der erste Parameter immer el, das das DOM-Element darstellt, an das die Anweisung gebunden ist. Dieser el-Parameter ist ein natives JS-Objekt, sodass benutzerdefinierte Vue-Anweisungen verwendet werden können, um direkt mit dem DOM zu interagieren. 3.Binding ist ein Objekt, das die folgenden Attribute enthält: Name, Wert, alterWert, Ausdruck, Argument, Modifikatoren 4.oldVnode ist nur in Update- und ComponentUpdated-Hooks wirksam 5. Mit Ausnahme von el sind die Attribute binding und vnode schreibgeschützt Einfach ausgedrückt ist die Hook-Funktion der Lebenszyklus. Das heißt, wenn eine Direktive an ein Element gebunden ist, gibt es innerhalb der Direktive 5 Lebenszyklus-Ereignisfunktionen. Erstellen Sie als Nächstes einen Fall, um das Auslösen dieser Hook-Funktionen anzuzeigen: <p v-test>Dies ist ein Textabschnitt</p> Standard exportieren { ... ... Anweisungen: { prüfen: { binden () { console.log('binden') }, eingefügt () { console.log('eingefügt') }, aktualisieren () { console.log('aktualisieren') }, Komponente aktualisiert () { console.log('Komponente aktualisiert') }, lösen () { console.log('aufheben') } } } } Ergebnis: Beim Rendern der Seite werden die Binde- und Einfügefunktionen ausgelöst. Wann werden also die anderen drei Hook-Funktionen ausgelöst? Offizielle Erklärung zum Update: update: Wird aufgerufen, wenn der VNode der Komponente aktualisiert wird. Dies kann jedoch geschehen, bevor die untergeordneten VNodes aktualisiert werden. Der Wert der Anweisung kann sich geändert haben, muss es aber nicht. Sie können jedoch unnötige Vorlagenaktualisierungen ignorieren, indem Sie die Werte vor und nach der Aktualisierung vergleichen (detaillierte Parameter der Hook-Funktion finden Sie weiter unten). Ich bin etwas verwirrt. Bezieht sich „VNode der Komponente“ auf das DOM-Element, das aktuell an die Direktive gebunden ist? Wenn ja, wird die Aktualisierung ausgelöst, solange sich der Status des aktuellen Elements ändert? Verwenden Sie v-show, um zwischen dem Anzeigen und Ausblenden von Elementen zu wechseln: <p v-test v-show="show">Dies ist ein weiterer Textabschnitt</p> <button @click="show = !show">Umschalten</button> Standard exportieren { Daten () { zurückkehren { zeigen: wahr } } } Standardmäßig werden Bind und Inserted ausgelöst. Wenn auf die Schaltfläche geklickt wird, um die Anzeige des Elements umzuschalten, ist das Ergebnis wie folgt: Das heißt, wenn der Stil eines Elements geändert wird, werden die Funktionen „Update“ und „componentUpdated“ ausgelöst. Welches Ereignis wird ausgelöst, wenn v-if verwendet wird? <p v-test v-if="show">Dies ist ein weiterer Textabschnitt</p> <button @click="show = !show">Umschalten</button> Ergebnis: Es wurde festgestellt, dass Unbind ausgelöst wird, weil v-if DOM-Elemente löscht oder neu erstellt. Wenn das an die Anweisung gebundene Element zerstört wird, wird das Unbind-Ereignis der Anweisung ausgelöst. Die neue Anzeige löst weiterhin Binden und Einfügen aus. Zusammenfassen:
Hier einige Beispiele für Anwendungsszenarien 1. Das Eingabefeld erhält automatisch den Fokus (offizielles Beispiel). 2. Klicken Sie außerhalb des Dropdown-Menüs, um das Menü auszublenden. 3. Überprüfen Sie die eingegebene E-Mail-Adresse und Telefonnummer. In den oben genannten Fällen können bei der Durchführung von Projekten stattdessen andere Methoden verwendet werden, aber benutzerdefinierte Vue-Anweisungen können an einer Stelle definiert und global aufgerufen werden, wodurch der Code prägnanter, effizienter und einfacher zu warten wird. Die Registrierungsmethoden von Anweisungen sind dieselben wie die Registrierungsmethoden von „Filtern“, „Mixins“ und „Komponenten“. Sie werden in zwei Typen unterteilt: einer ist die globale Registrierung und der andere ist die lokale Registrierung. 3. Globale Anweisungen// Füge dem Element einen zufälligen Hintergrund hinzu <div v-bgcolor></div> Vue.direktive('bgcolor', { binden: Funktion(el, Bindung, vnode) { el.style.backgroundColor = "#" + Math.random().toString(16).slice(2,8); } }) Hinweis: Beim Definieren muss dem Kommandonamen kein v- vorangestellt werden. Beim Aufruf muss dem Kommandonamen jedoch ein v- vorangestellt werden. 4. Lokale Anweisungen// Gleiche Ebene wie Daten und Methoden Methoden: {}, Anweisungen: { Hintergrundfarbe: binden: Funktion(el, Bindung) { el.style.backgroundColor = "#" + Math.random().toString(16).slice(2,8); } } } Ich persönlich bevorzuge die Methode der globalen Registrierung, da die jetzt verwendeten benutzerdefinierten Anweisungen universell und wiederverwendbar sein sollten. Daher ist es sinnvoller, Anweisungen für das gesamte Projekt bereitzustellen, und nicht nur für eine Komponente. Wenn es nur an einer Stelle verwendet wird, können Sie die Funktion einfach direkt hinzufügen. Warum dieser ganze Aufwand? 5. Benutzerdefinierte Anweisungen mit Parametern<div v-bgcolor='{Farbe: 'orange'}'></div> Vue.direktive('bgcolor', { binden: Funktion(el, Bindung) { el.style.backgroundColor = Bindung.Wert.Farbe; } }) 6. FunktionsabkürzungWenn Sie beim Binden und Aktualisieren dasselbe Verhalten auslösen möchten und sich nicht um andere Hooks kümmern, können Sie es wie folgt schreiben: // Global Vue.directive('bgcolor', Funktion (el, Bindung) { el.style.backgroundColor = Bindung.Wert }) // lokale Anweisungen: { bgcolor: (el, Bindung) => { el.style.backgroundColor = Bindung.Wert } } 7. AnwendungsbeispieleNachdem Sie mit der Erstellungsmethode und den Parametern der Anweisung vertraut sind, werden wir sie verwenden, um zwei praktische Fälle zu erstellen. Die Funktion zum Ausblenden des Untermenüs durch Klicken auf die leere Stelle wird durch Anweisungen realisiert. Der spezifische Code lautet wie folgt: // klickOutside.js Standard exportieren { binden (el, Bindung) { const self = {} // Definieren Sie eine private Variable, um die Aufhebung der Bindung von Ereignis-Listenern zu ermöglichen self.documentHandler = (e) => { if (el.contains(e.target)) { // Hier bestimmen wir, ob das gebundene Element das Klickelement enthält, wenn ja, returnieren wir false } if (binding.value) { // Bestimmen Sie, ob der Wert in der Anweisung gebunden ist binding.value(e) // Wenn eine Funktion gebunden ist, rufen Sie diese Funktion auf. Hier ist binding.value die Methode handleClose} returniere wahr } document.addEventListener('klicken', self.documentHandler) }, lösen (el) { //Ereignisüberwachung entfernen document.removeEventListener('click', self.documentHandler) self.documentHandler löschen } } Verwendung im Bauteil: <Vorlage> <div> <div v-show="istAnzeigen" v-clickoutside="handleClickOutside" @click="anzeigenOrAusblenden"> Untermenü... </div> </div> </Vorlage> <Skript> clickOutside aus „./js/clickOutside“ importieren Standard exportieren { ... ... Anweisungen: { Klicke nach außen }, Daten() { zurückkehren { isShow: true, }; }, Methoden: { handleOutsideClick() { this.isShow = false } } } </Skript> Benutzerdefinierte Anweisungen zum Optimieren des Bildladens: Während des Ladens des Bildes wird ein grauer Hintergrund verwendet, um den Platz auszufüllen, bevor der Ladevorgang abgeschlossen ist, und das Bild wird direkt nach dem Laden angezeigt. <Vorlage> <div> <!-- Parameter können nicht direkt mit URL-Adressen gefüllt werden--> <img v-imgUrl='URL' /> </div> </Vorlage> <Skript> Standard exportieren { Daten () { zurückkehren { URL: „../src/assets/logo.png“ } } } </Skript> // Globale Registrierung Vue.directive('imgUrl', function (el, binding) { el.style.backgroundColor = '#FEFEFE' //Hintergrundfarbe festlegen var img = new Image() img.src = binding.value // Parameter nach der binding.value-Anweisung img.onload = function () { el.style.backgroundColor = '' el.src = Bindungswert } }) Oben finden Sie eine ausführliche Erläuterung der benutzerdefinierten Anweisungen von Vue und ihrer Verwendung. Weitere Informationen zu Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Vergleichende Analyse von IN und Exists in MySQL-Anweisungen
>>: Ideen und Lösungen zur Fehlerbehebung bei hoher CPU-Auslastung in Linux-Systemen
1. MySQL-Befehl importieren Die Importsyntax des ...
Pseudo-Arrays und Arrays In JavaScript sind mit A...
ylbtech_html_drucken HTML-Druckcode, unterstützt S...
Inhaltsverzeichnis Anforderungen aus der Projektp...
1.1 Einführung in die iptables-Firewall Netfilter...
Designer müssen Psychologie verstehen, indem sie ...
Entfernen Sie das gepunktete Kästchen auf dem Link...
Vorgestern stieß ich in der Produktionsumgebung a...
In diesem Artikel wird der spezifische Code zur I...
Durch das Hinzufügen des Attributs rel="nofo...
CSS3 – Schatten hinzufügen (mithilfe von Boxschat...
„Entwicklung ist mehr als nur Code schreiben“ stam...
Inhaltsverzeichnis 1. Verwenden Sie die Komponent...
Die Umgebung dieses Artikels ist Windows 10 und d...
Verwenden Sie die Vue-Cropper-Komponente, um Avat...