1. Berechnete EigenschaftenAusdrücke in Vorlagen sind sehr praktisch, sie sind jedoch in erster Linie für einfache Berechnungen gedacht. Wenn Sie zu viel Logik in eine Vorlage packen, kann diese unhandlich und schwer zu pflegen werden. Zum Beispiel: <div id="Beispiel"> {{ message.split('').reverse().join('') }} </div> An diesem Punkt ist die Vorlage nicht mehr nur eine einfache deklarative Logik. Sie müssen eine Weile darauf schauen, um zu erkennen, dass wir hier die umgekehrte Zeichenfolge der Variablen Sie sollten daher für jede komplexe Logik berechnete Eigenschaften verwenden. 1.1 Einfaches Beispiel<div id="Beispiel"> <p>Ursprüngliche Nachricht: "{{ message }}"</p> <p>Berechnete umgekehrte Nachricht: "{{ reversedMessage }}"</p> </div> var vm = neuer Vue({ el: '#Beispiel', Daten: { Nachricht: 'Hallo' }, berechnet: { // Berechneter Eigenschaftsgetter umgekehrteNachricht: Funktion () { // „this“ bezieht sich auf die VM-Instanz return this.message.split('').reverse().join('') } } }) Ergebnis:
Hier deklarieren wir eine berechnete Eigenschaft console.log(vm.reversedMessage) // => 'olleH' vm.message = "Auf Wiedersehen" console.log(vm.reversedMessage) // => 'eybdooG' Sie können die Browserkonsole öffnen und Sie können berechnete Eigenschaften in Vorlagen genauso binden wie normale 1.2 Berechneter Eigenschaftscache vs. MethodeMöglicherweise haben Sie bemerkt, dass wir denselben Effekt erzielen können, indem wir Methoden in Ausdrücken aufrufen: <p>Umgekehrte Nachricht: "{{ reversedMessage() }}"</p> // In Komponentenmethoden: { umgekehrteNachricht: Funktion () { gib diese.Nachricht.Split('').Reverse().Join('') zurück } } Wir können dieselbe Funktion als Methode statt als berechnete Eigenschaft definieren. Das Endergebnis ist in beiden Fällen genau dasselbe. Der Unterschied besteht jedoch darin, dass berechnete Eigenschaften basierend auf ihren reaktiven Abhängigkeiten zwischengespeichert werden. Eine Neubewertung erfolgt nur dann, wenn sich die zugehörigen reaktiven Abhängigkeiten ändern. Dies bedeutet, dass, solange sich Dies bedeutet auch, dass die folgende berechnete Eigenschaft nicht mehr aktualisiert wird, da Date.now() keine reaktive Abhängigkeit ist: berechnet: { jetzt: Funktion () { returniere Date.now() } } Im Gegensatz dazu führt der Aufruf der Methode immer dann, wenn ein erneutes Rendern ausgelöst wird, die Funktion erneut aus. Warum brauchen wir Caching? Angenommen, wir haben eine rechenintensive Eigenschaft 1.3 Berechnete Eigenschaften vs. überwachte Eigenschaften Betrachten Sie dieses Beispiel: <div id="demo">{{ vollständigerName }}</div> var vm = neuer Vue({ el: '#demo', Daten: { Vorname: 'Foo', Nachname: 'Bar', vollständiger Name: „Foo Bar“ }, betrachten: Vorname: Funktion (Wert) { dieser.vollständigerName = Wert + ' ' + dieser.letzterName }, Nachname: Funktion (Wert) { dieser.vollständigerName = dieser.vorname + ' ' + val } } }) Der obige Code ist zwingend und wiederholt sich. Vergleichen Sie dies mit der berechneten Eigenschaftsversion: var vm = neuer Vue({ el: '#demo', Daten: { Vorname: 'Foo', Nachname: 'Bar' }, berechnet: { vollständigerName: Funktion () { returniere diesen.Vorname + ' ' + diesen.Nachname } } }) Viel besser, nicht wahr? 1.4 Berechnete EigenschaftssetterBerechnete Eigenschaften haben standardmäßig nur einen Getter, Sie können bei Bedarf aber auch einen Setter angeben: // ... berechnet: { vollständiger Name: // Getter erhalten: Funktion () { returniere diesen.Vorname + ' ' + diesen.Nachname }, // Setter set: Funktion (neuerWert) { Variablennamen = neuerWert.split(' ') dieser.Vorname = Namen[0] this.lastName = Namen[Namen.Länge - 1] } } } // ... Wenn Sie jetzt 2. Zuhörer Während berechnete Eigenschaften in den meisten Fällen geeigneter sind, gibt es Zeiten, in denen ein benutzerdefinierter Listener erforderlich ist. Aus diesem Grund bietet Zum Beispiel: <div id="Uhr-Beispiel"> <p> Stellen Sie eine Ja/Nein-Frage: <input v-model="Frage"> </p> <p>{{ Antwort }}</p> </div> <!-- Da das Ökosystem an AJAX-Bibliotheken und allgemeinen Tools bereits recht umfangreich ist, wird der Vue-Kerncode nicht wiederholt--> <!-- Diese Funktionen werden bereitgestellt, um die Dinge schlank zu halten. Dies gibt Ihnen auch die Freiheit, Werkzeuge auszuwählen, mit denen Sie besser vertraut sind. --> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script> <Skript> var watchExampleVM = neuer Vue({ el: '#Uhrenbeispiel', Daten: { Frage: '', Antwort: „Ich kann Ihnen keine Antwort geben, bis Sie eine Frage stellen!“ }, betrachten: // Wenn sich `question` ändert, wird diese Funktion question: function (newQuestion, oldQuestion) { ausführen. this.answer = „Warte darauf, dass Sie mit dem Tippen aufhören …“ dies.debouncedGetAnswer() } }, erstellt: Funktion () { // „_.debounce“ ist eine Funktion, die die Häufigkeit von Operationen über Lodash begrenzt. // In diesem Beispiel möchten wir die Häufigkeit des Zugriffs auf yesno.wtf/api begrenzen. // Die AJAX-Anfrage wird erst gestellt, wenn der Benutzer mit der Eingabe fertig ist. Um mehr über // die Funktion `_.debounce` (und ihre Cousine `_.throttle`) zu erfahren, // Bitte beachten Sie: https://lodash.com/docs#debounce this.debouncedGetAnswer = _.debounce(this.getAnswer, 500) }, Methoden: { getAnswer: Funktion () { wenn (diese.Frage.indexOf('?') === -1) { this.answer = 'Fragen enthalten normalerweise ein Fragezeichen. ;-)' zurückkehren } this.answer = „Denke nach …“ var vm = dies axios.get('https://yesno.wtf/api') .then(Funktion (Antwort) { vm.Antwort = _.capitalize(Antwort.Daten.Antwort) }) .catch(Funktion (Fehler) { vm.answer = 'Fehler! Die API konnte nicht erreicht werden. ' + Fehler }) } } }) </Skript> Ergebnis:
In diesem Beispiel können wir mithilfe der Dies ist das Ende dieses Artikels über die Details zu berechneten Eigenschaften und Listenern. Weitere verwandte berechnete Eigenschaften und Listener finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Kubernetes-Pod-Orchestrierung und des Lebenszyklus
>>: Code zum Anzeigen des Inhalts eines TXT-Buchs auf einer Webseite
Der folgende Inhalt stellt den Prozess und die Lö...
Dieser Artikel zeichnet das ausführliche Tutorial...
Inhaltsverzeichnis Unäre Operatoren Boolesche Ope...
1. Drücken Sie Win + R und geben Sie cmd ein, um ...
Welchen Parameter verwendet der RPM-Befehl zum In...
Inhaltsverzeichnis Vorwort Vorteile der Axios-Kap...
Inhaltsverzeichnis CSS3-Boxmodell a. CSS3-Filter ...
Wenn Sie zur Implementierung eines Kontrollkästch...
fragen: Ich habe den Hyperlink mit CSS formatiert...
Inhaltsverzeichnis 1. Kernbefehle 2. Allgemeine B...
Ich habe heute eine neue Version von MySQL (8.0.2...
Erstellen Sie ein Verzeichnis cd /usr/local/docke...
Dieser Artikel erläutert anhand von Beispielen da...
Vorwort In MySQL werden datenbankübergreifende Ab...
Abgeleitete Tabellen Wenn die Hauptabfrage eine a...