Bei der Verwendung von Vue zum Entwickeln von Projekten stoßen Sie häufig auf dieses Problem: Wenn in den Daten von Vue ein Objekt oder Array (der Wert im Array ist ein Objekt) deklariert oder zugewiesen wird und dem Objekt ein neues Attribut hinzugefügt wird, wird die Ansicht nicht aktualisiert, wenn der Wert dieses Attributs aktualisiert wird. Dies liegt daran, dass die neu hinzugefügten Attribute nicht reagieren und daher keine Ansichtsaktualisierung auslösen. Normalerweise wird zur Lösung dieses Problems die statische Methode Vue.set() oder die Instanzmethode this.$set() verwendet. Verwendung: Objekt: this.$set(Ziel, Schlüssel, Wert) Array: dies.$set(Ziel, Index, Wert) Unabhängig davon, ob es sich um die statische Methode Vue.set() oder die Instanzmethode this.$set() handelt, ist die zugrunde liegende Implementierungslogik dieselbe. Die Implementierungslogik lautet wie folgt: /** * Eine Eigenschaft für ein Objekt festlegen. Fügt die neue Eigenschaft hinzu und * löst eine Änderungsbenachrichtigung aus, wenn die Eigenschaft nicht * existiert bereits. */ Exportfunktionssatz (Ziel: Array<beliebig> | Objekt, Schlüssel: beliebig, Wert: beliebig): beliebig { // Bestimmen Sie zunächst, ob das übergebene Zielobjekt undefiniert, null oder primitiv (ursprünglicher Wert) ist, oder geben Sie eine Warnung aus, wenn (process.env.NODE_ENV !== 'production' && (istUndef(Ziel) || istPrimitive(Ziel)) ) { warnen(`Reaktive Eigenschaft kann nicht auf undefinierten, Null- oder primitiven Wert gesetzt werden: ${(target: any)}`) } // Überprüfen Sie, ob das Zielobjekt target ein Array und key ein gültiger Index ist, if (Array.isArray(target) && isValidArrayIndex(key)) { // Nimm den größeren Wert der Länge und des Schlüssels des Zielarrays als Längenattribut des Ziels target.length = Math.max(target.length, key) //Ersetze das Element an der Schlüsselposition durch splice target.splice(key, 1, val) Rückgabewert } // Wenn der Schlüssel bereits im Zielobjekt vorhanden ist, weisen Sie ihn direkt zu, wenn (Schlüssel in Ziel && !(Schlüssel in Object.prototype)) { Ziel[Schlüssel] = Wert Rückgabewert } // Holen Sie sich das Beobachterobjekt im Ziel const ob = (target: any).__ob__ // Wenn das Ziel eine Vue-Instanz ist oder $data direkt zurückgegeben wird, wenn (target._isVue || (ob && ob.vmCount)) { process.env.NODE_ENV !== 'Produktion' && warn( 'Vermeiden Sie das Hinzufügen reaktiver Eigenschaften zu einer Vue-Instanz oder ihren Stamm-$data' + „Zur Laufzeit – deklarieren Sie es im Voraus in der Datenoption.“ ) Rückgabewert } // Wenn ob nicht existiert, bedeutet dies, dass das Ziel kein responsives Objekt ist und der Wert direkt zugewiesen wird, ohne eine Ansichtsaktualisierung auszulösen, wenn (!ob) { Ziel[Schlüssel] = Wert Rückgabewert } // Wenn ob existiert, setze key als responsive Eigenschaft defineReactive(ob.value, key, val) // Benachrichtigung senden, um Ansichtsaktualisierung auszulösen ob.dep.notify() Rückgabewert } Das Obige ist der Quellcode der Set-Methode in Vue. Hierbei ist zu beachten, dass bei der Verarbeitung eines Arrays die verwendete Splice-Methode nicht die Methode des Arrays selbst ist, sondern eine in Vue gekapselte responsive Array-Methode. Dies ist das Ende dieses Artikels über den detaillierten Quellcode der Vue-Methode vue.$set(). Weitere relevante Inhalte zum Quellcode der Vue-Methode vue.$set() 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:
|
>>: Studiennotizen zur MySQL Master-Slave-Konfiguration
deepin und Ubuntu sind beides auf debian basieren...
Vorwort Kürzlich trat in der Testumgebung ein Pro...
Inhaltsverzeichnis Einführung in utf8mb4 Fehler b...
Installieren Sie Apache aus der Quelle 1. Laden S...
Docker-Machine ist ein offiziell von Docker berei...
Inhaltsverzeichnis Vorwort 1. Was ist Skalierbark...
Inhaltsverzeichnis Szenario: Die Serverdatenbank ...
Dieser Artikel beschreibt MySQL-Mehrtabellenabfra...
Die Semantik, der Schreibstil und die Best Practi...
<br />Im Allgemeinen ist die Dateiorganisati...
Die Installation und Bereitstellung eines private...
Inhaltsverzeichnis Einführung Spiegel-Repository ...
1. Um die MySQL-Datenbank herunterzuladen, besuch...
Vorwort Nodejs ist eine serverseitige Sprache. Wä...
Ich habe vor kurzem angefangen, MySQL zu lernen. ...