Schreiben wir zunächst eine einfache neuer Vue({ el: '#app', Daten() { zurückkehren { ein: 1, b: 2, c: 3, d: 4, }; }, erstellt() { Konsole.log(dies.b); dies.b = "aaa"; }, Vorlage: '<div>Hallo Welt{{a}}{{b}}</div>', }); In Vueinstance/state.js wird der Proxy verwendet, um jedes Attribut zu proxyen const keys = Objekt.keys(Daten) const props = vm.$options.props const-Methoden = vm.$options.methods sei i = Schlüssel.Länge während (i--) { const Schlüssel = Schlüssel[i] wenn (Requisiten und hasOwn (Requisiten, Schlüssel)) { process.env.NODE_ENV !== 'Produktion' && warn( `Die Dateneigenschaft "${key}" ist bereits als Prop deklariert. ` + `Verwenden Sie stattdessen den Standardwert der Eigenschaft.`, vm ) } sonst wenn (!isReserved(Schlüssel)) { //Eigenschaften des Proxy-Objekts proxy(vm, `_data`, key) } } // Daten beobachten beobachte(Daten, wahr /* alsRootData */) Verwenden Sie defineReactive, um jedes Attribut in Daten zu kapern beobachten(Daten, wahr /* asRootData */); // beobachten const keys = Objekt.keys(obj); für (lass i = 0; i < Schlüssel.Länge; i++) { definiereReaktiv(Objekt, Schlüssel[i]); } // definiereReaktiv Objekt.defineProperty(Objekt, Schlüssel, { aufzählbar: wahr, konfigurierbar: true, erhalten: Funktion reactiveGetter() { const Wert = Getter? getter.call(Obj) : Wert; // Der springende Punkt ist hier. Wenn die Attribute später in der Vorlage verwendet werden, wird die Funktion reactiveGetter ausgeführt // Wird von der Dep-Klasse gesammelt if (Dep.target) { console.log(`${key}-Eigenschaft wird von der Dep-Klasse erfasst`) dep.abhängig(); wenn (KindOb) { childOb.dep.depend(); wenn (Array.isArray(Wert)) { abhängigArray(Wert); } } } Rückgabewert; }, set: Funktion reactiveSetter(newVal) { const Wert = Getter? getter.call(Obj) : Wert; /* eslint-deaktiviert keinen Selbstvergleich */ wenn (neuerWert === Wert || (neuerWert !== neuerWert && Wert !== Wert)) { zurückkehren; } wenn (Setter) { // Hier ist die berechnete Menge der Funktion setter.call(obj, newVal); } anders { val = neuerWert; } childOb = !shallow und beobachten (neuer Wert); // Wenn wir die Eigenschaft ändern, rufen wir „notify“ auf, um die Ansicht asynchron zu aktualisieren dep.notify(); }, }); Führen Sie $mount aus, um die Ansicht zu mounten wenn (vm.$options.el) { vm.$mount(vm.$options.el); } $mount ist eine Methode, die den Vue-Prototyp aufruft. Der entscheidende Punkt ist der letzte Satz mount.call(this, el, hydrating) Vue.prototype.$mount = Funktion ( el?: Zeichenfolge | Element, hydratisierend?: Boolesch ): Komponente { el = el && Abfrage(el); const Optionen = diese.$Optionen; // Vorlage/EL auflösen und in Renderfunktion umwandeln /** * Prüfen, ob die Renderfunktion vorhanden ist? Wenn es nicht existiert, analysieren Sie die Vorlage template* Wenn Vue eine Seite rendert, gibt es zwei Möglichkeiten: 1. Vorlage, 2. Rendern. Letztendlich müssen alle Vorlagenklassen mit render*/ gerendert werden. wenn (!optionen.render) { let Vorlage = Optionen.Vorlage; wenn (Vorlage) { wenn (Typ der Vorlage === 'Zeichenfolge') { wenn (template.charAt(0) === '#') { Vorlage = idToTemplate(Vorlage); /* istanbul ignorieren wenn */ wenn (Prozess.env.NODE_ENV !== 'Produktion' && !Vorlage) { warnen( `Vorlagenelement nicht gefunden oder leer: ${options.template}`, Das ); } } } sonst wenn (Vorlage.Knotentyp) { Vorlage = Vorlage.innerHTML; } anders { wenn (Prozess.Umgebung.NODE_ENV !== 'Produktion') { warnen('ungültige Vorlagenoption:' + Vorlage, diese); } gib dies zurück; } } sonst wenn (el) { // Wenn die Vorlage nicht existiert, erstellen Sie eine Standard-HTML-Vorlage. Vorlage = getOuterHTML(el); } } // Vue.prototype.$mount neu schreiben und abschließend die zwischengespeicherte Mount-Methode aufrufen, um das Mounten von $mount abzuschließen return mount.call(this, el, hydrating); }; Hier ruft mount die Methode mountComponent(this, el, hydrating) auf, mountComponent führt die Funktion _render aus und schließlich ruft _render render auf, um einen Vnode zu generieren. const { render, _parentVnode } = vm.$optionen; vnode = render.call(vm._renderProxy, vm.$createElement); Das letzte Bild zeigt, dass Wenn der Artikel Fehler enthält, weisen Sie mich bitte darauf hin und ich werde ihn weiter verbessern. Vielen Dank. Wenn Sie den Quellcode debuggen müssen, klicken Sie hier und folgen Sie der Readme-Datei. Hoffnungsstern Dies ist das Ende dieses Artikels über das Ändern einer Eigenschaft in Vue-Daten. Wird die Ansicht aktualisiert? Für relevantere Vue-Dateninhalte suchen Sie bitte nach früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Importieren von CSS-Dateien unter Verwendung von Beurteilungsbedingungen
>>: HTML+CSS3-Code zur Realisierung des Animationseffekts der Planeten des Sonnensystems
In diesem Artikel wird der spezifische Code von V...
Vorwort Dieser Artikel stellt hauptsächlich 4 Met...
Um eine hohe Verfügbarkeit des Netzwerks zu gewäh...
Starten Sie MySQL zunächst im Skip-Grant-Tables-M...
1. Laden Sie das Alpenbild herunter [root@DockerB...
Inhaltsverzeichnis 1. Einführung in Sysbench #Pro...
Import: Aufgrund der Projektanforderungen werden ...
HTML-Kommentarfeld mit Emoticons. Die Emoticons w...
Betriebssystem: Windows 10_x64 Python-Version: 3....
<br />Original: http://www.alistapart.com/ar...
Wenn man online nach Methoden sucht, um Angular -...
1. Vorbereitung der virtuellen Maschine 1. Erstel...
Vor Kurzem hat das Unternehmen damit begonnen, al...
React ist eine JavaScript-Bibliothek zum Erstelle...
Einfache Implementierung von Mysql-Anweisungen zu...