1. Was ist eine benutzerdefinierte Anweisung?Die Inline-Attribute, die mit v- beginnen und die wir sehen, sind alle Anweisungen. Verschiedene Anweisungen können verschiedene Funktionen ausführen oder implementieren und Low-Level-Operationen an gewöhnlichen DOM-Elementen durchführen. In diesem Fall werden benutzerdefinierte Anweisungen verwendet. Zusätzlich zu den standardmäßig integrierten Anweisungen für Kernfunktionen (V-Model und V-Show) können Sie in Vue auch benutzerdefinierte Anweisungen registrieren. Es gibt mehrere Möglichkeiten, den Befehl zu verwenden: //Instanziiert einen Befehl, aber dieser Befehl hat keinen Parameter `v-xxx` // -- Übergeben Sie den Wert an die Anweisung `v-xxx="value"` // -- Übergeben Sie die Zeichenfolge an die Direktive, beispielsweise `v-html="'<p>Content</p>'"` `v-xxx="'Zeichenfolge'"` // -- Übergeben Sie Parameter (`arg`), wie etwa `v-bind:class="className"` `v-xxx:arg="Wert"` // -- Modifikatoren verwenden (`modifier`) `v-xxx:arg.modifier="Wert"` 2. So passen Sie Anweisungen anDie Registrierung einer benutzerdefinierten Direktive kann global oder lokal erfolgen. Die globale Registrierung erfolgt hauptsächlich mit der Methode Vue.directive Der erste Parameter von Vue.directive ist der Name der Direktive (ohne das Präfix v-), und der zweite Parameter können Objektdaten oder eine Direktivenfunktion sein. // Registriere eine globale benutzerdefinierte Direktive `v-focus` Vue.direktive('Fokus', { // Wenn das gebundene Element in das DOM eingefügt wird ... eingefügt: Funktion (el) { // Fokuselement el.focus() // Eine kleine Funktion, die das Eingabefeld automatisch fokussiert, nachdem die Seite geladen wurde} }) Die lokale Registrierung erfolgt durch Festlegen des Direktivenattributs in den Komponentenoptionen Anweisungen: { Fokus: // Definition der Anweisung eingefügt: function (el) { el.focus() // Eine kleine Funktion, die das Eingabefeld automatisch fokussiert, nachdem die Seite geladen wurde} } } Sie können dann die neue V-Fokus-Eigenschaft auf jedes Element in Ihrer Vorlage wie folgt anwenden: <Eingabe v-Fokus /> Hook-FunktionBenutzerdefinierte Anweisungen verfügen wie Komponenten auch über Hook-Funktionen:
Alle Parameter der Hook-Funktion lauten wie folgt:
Mit Ausnahme von el sollten alle anderen Parameter schreibgeschützt sein und nicht geändert werden. Wenn Sie Daten zwischen Hooks austauschen müssen, empfiehlt es sich, dies über den Datensatz des Elements zu tun. Zum Beispiel: <div v-demo="{ color: 'white', text: 'hallo!' }"></div> <Skript> Vue.Direktive('demo', Funktion (el, Bindung) { console.log(Bindung.Wert.Farbe) // "weiß" console.log(binding.value.text) // "Hallo!" }) </Skript> 3. AnwendungsszenarienDie Verwendung benutzerdefinierter Komponenten kann einige unserer alltäglichen Szenarien abdecken. Hier sind einige Beispiele für benutzerdefinierte Komponenten:
Eingabefeld Anti-ShakeIn diesem Fall legen Sie eine benutzerdefinierte V-Throttle-Anweisung fest, um ein Verwackeln zu verhindern. Zum Beispiel: // 1. Setze die benutzerdefinierte v-throttle-Direktive Vue.directive('throttle', { binden: (el, Bindung) => { let throttleTime = binding.value; // Anti-Shake-Zeitif (!throttleTime) { // Wenn der Benutzer die Anti-Shake-Zeit nicht einstellt, beträgt die Standardeinstellung 2 s Drosselzeit = 2000; } lass cbFun; el.addEventListener('klicken', event => { if (!cbFun) { // Erste Ausführung cbFun = setTimeout(() => { cbFun = null; }, Drosselzeit); } anders { Ereignis und Ereignis.stopImmediatePropagation(); } }, WAHR); }, }); // 2. Legen Sie benutzerdefinierte v-throttle-Anweisungen für den Button-Tag <button @click="sayHello" v-throttle>Senden</button> fest. Lazy Loading von BildernLegen Sie eine benutzerdefinierte V-Lazy-Komponente fest, um das verzögerte Laden von Bildern abzuschließen const LazyLoad = { // Installationsmethode install(Vue,options){ //Lade Bild statt Bild let defaultSrc = options.default; Vue.direktive('faul',{ binden(el,Bindung){ LazyLoad.init(el,Bindung.Wert,Standardquelle); }, eingefügt(el){ // Kompatibilitätsverarbeitung if('InterpObserver' in window){ LazyLoad.observe(el); }anders{ LazyLoad.listenerScroll(el); } }, }) }, // Initialisierung init(el,val,def){ // src speichert die echte Quelle el.setAttribute('src',val); // Quelle auf Laden des Bildes setzen el.setAttribute('src',def); }, // Verwenden Sie InterpObserver, um el zu überwachen beobachten(el){ let io = neuer InterpObserver(Einträge => { lass realSrc = el.dataset.src; wenn (Einträge[0].istSchnittpunkt) { wenn(realSrc){ el.src = realeQuelle; el.removeAttribute('src'); } } }); io.observe(el); }, // Auf Scroll-Ereignisse warten listenerScroll(el){ : Lassen Sie den Handler = LazyLoad.throttle(LazyLoad.load,300); LazyLoad.load(el); window.addEventListener('scroll',() => { handler(el); }); }, // Lade das echte Bild load(el){ let windowHeight = document.documentElement.clientHeight let elTop = el.getBoundingClientRect().top; let elBtm = el.getBoundingClientRect().bottom; lass realSrc = el.dataset.src; wenn(elTop - Fensterhöhe<0&&elBtm > 0){ wenn(realSrc){ el.src = realeQuelle; el.removeAttribute('src'); } } }, // Drosselung(fn,Verzögerung){ lass den Timer; lass vorherige Zeit; Rückgabefunktion (... args) { lassen Sie currTime = Date.now(); lass Kontext = dies; wenn(!vorherigeZeit) vorherigeZeit = aktuelleZeit; Zeitüberschreitung löschen(Timer); if (aktuelleZeit - vorherigeZeit > Verzögerung) { vorherigeZeit = aktuelleZeit; fn.apply(Kontext,Argumente); Zeitüberschreitung löschen(Timer); zurückkehren; } Timer = setzeTimeout(Funktion(){ vorherigeZeit = Date.now(); Zeitgeber = null; fn.apply(Kontext,Argumente); },Verzögerung); } } } Standard-LazyLoad exportieren; Kopierfunktion mit einem Klickimportiere { Message } von „Ant-Design-Vue“; const vCopy = { // /* Die Bind-Hook-Funktion wird beim ersten Binden aufgerufen und kann zum Initialisieren der Einstellungen verwendet werden. el: das DOM-Objekt, auf das eingewirkt werden soll. value: der an die Anweisung übergebene Wert, d. h. der Wert, den wir kopieren möchten. */ binden(el, { Wert }) { el.$value = value; // Verwenden Sie eine globale Eigenschaft, um den übergebenen Wert zu speichern, da dieser Wert in anderen Hook-Funktionen verwendet wird el.handler = () => { wenn (!el.$wert) { // Wenn der Wert leer ist, geben Sie eine Eingabeaufforderung ein. Die Eingabeaufforderung, die ich hier verwende, ist die Eingabeaufforderung von Ant-Design-Vue. Sie können sie nach Belieben verwenden. Message.warning('Kein kopierter Inhalt'); zurückkehren; } // Textarea-Tag dynamisch erstellen const textarea = document.createElement('textarea'); // Setzen Sie den Textbereich auf schreibgeschützt, um zu verhindern, dass die Tastatur unter iOS automatisch angezeigt wird, und verschieben Sie den Textbereich aus dem sichtbaren Bereich. textarea.readOnly = 'schreibgeschützt'; Textbereich.Stil.Position = "absolut"; Textbereich.Stil.links = '-9999px'; // Weisen Sie dem Value-Attribut des Textarea-Tags den zu kopierenden Wert zu textarea.value = el.$value; //Textbereich in den Textkörper einfügen document.body.appendChild(textarea); //Wert auswählen und kopieren textarea.select(); // textarea.setSelectionRange(0, textarea.value.length); const result = document.execCommand('Kopieren'); wenn (Ergebnis) { Message.success('Kopieren erfolgreich'); } Dokument.Body.RemoveChild(Textbereich); }; // Klickereignis binden, das sogenannte One-Click-Kopieren el.addEventListener('click', el.handler); }, // Wenn der eingehende Wert aktualisiert wird, lösen Sie componentUpdated(el, { value }) { aus. el.$wert = Wert; }, // Wenn die Anweisung vom Element gelöst ist, entferne die Ereignisbindung unbind(el) { el.removeEventListener('klicken', el.handler); }, }; Standard-vCopy exportieren; Ziehen<div ref="a" id="bg" v-ziehen></div> Anweisungen: { ziehen: { bind() {}, eingefügt(el) { el.onmousedown = (e) => { lass x = e.clientX - el.offsetLeft; sei y = e.clientY - el.offsetTop; document.onmousemove = (e) => { sei xx = e.clientX – x + "px"; sei yy = e.clientY – y + "px"; el.style.left = xx; el.style.top = yy; }; el.onmouseup = (e) => { Dokument.onmousemove = null; }; }; }, }, }, Es gibt viele Anwendungsszenarien für benutzerdefinierte Komponenten, z. B. Drag & Drop-Anweisungen, Seitenwasserzeichen, Berechtigungsüberprüfung usw. ZusammenfassenDies ist das Ende dieses Artikels über benutzerdefinierte Anweisungen in Vue. Weitere relevante Inhalte zu benutzerdefinierten Anweisungen in Vue finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Analyse des Parameterübertragungsprozesses des Treibermoduls in Linux
>>: So installieren Sie Solr 8.6.2 in Docker und konfigurieren den chinesischen Wortsegmentierer
Die Fallstricke 1. In vielen Tutorials im Interne...
Suchspiegel Docker-Suche Rocketmq Bildversion anz...
Installieren Sie TomCat unter Windows Dieser Arti...
Inhaltsverzeichnis Vorwort Kern - CancelToken Pra...
Inhaltsverzeichnis 1. Kommunikationsmethode für V...
Inhaltsverzeichnis 1. Einleitung 2. Umgebung und ...
Tatsächlich ist es sehr einfach, Axios in Vue zu ...
Inhaltsverzeichnis 1. Die Rolle der Nginx-Prozess...
Inhaltsverzeichnis 1. Verbindung zum Tencent Clou...
1. MySQL-Exportdatei: SELECT `pe2e_user_to_compan...
Während der Entwicklung kommt es sehr häufig vor,...
Ubuntu ist ein relativ beliebtes Linux-Desktopsys...
Dieser Artikel beschreibt das Beispiel eines gepl...
<br />Es ist nicht länger als zwei Jahre her...
Während der Installation von Ubuntu 18 trat das P...