VorwortIn diesem Artikel wird erklärt, wie Vue-Komponenten analysiert und gerendert werden.
<div id="app"> <meine-Schaltfläche></meine-Schaltfläche> </div> <Skript> Vue.component("mein-Button", { Vorlage: "<button>Schaltflächenkomponente</button>", }); lass vm = neues Vue({ el:'#app' }); </Skript> Prinzip der globalen KomponentenanalyseUm die Isolierung der Komponenten sicherzustellen, generiert jede Komponente über die Extend-Methode eine neue Klasse, um die übergeordnete Klasse zu erben. Und führen Sie die vom Benutzer über die Methode Vue.component übergebenen Optionen in vue.options.components zusammen. Führen Sie dann beim Initialisieren von Vue Vue.options.components und vm.$options.components zusammen. 1. Vue.component-MethodeVue.options._base = Vue; //Sie können Vue über \_base finden Vue.options.components = {}; Vue.component = Funktion (ID, Definition) { //Jede Komponente generiert eine neue Klasse, um die Vaterdefinition zu erben = this.options._base.extend(definition); console.log("1. Erstellen Sie einen Konstruktor für die Komponente, basierend auf Vue", Definition); diese.Optionen.Komponenten[id] = Definition; }; 2. Vue.extend-MethodeDie Extend-Methode generiert eine Klasse, die von Vue erbt und alle Funktionen der übergeordneten Klasse haben sollte. importiere {mergeOptions} von '../util/index' Vue.extend = Funktion (Definition) { const Vue = dies; const Sub = Funktion VueComponent(Optionen) { this._init(Optionen); }; Sub.prototype = Objekt.erstellen(Vue.prototype); Sub.prototype.constructor = Sub; Untergeordnete Optionen = mergeOptions(Vue.Optionen, Definition); Sub zurückgeben; }; 3. Zusammenführen von AttributenFüge die von Vue.options und Vue.component(definition) übergebene Definition zusammen. strats.components = Funktion (Elternwert, Kindwert) { let Optionen = Objekt.erstellen(parentVal); wenn (Kindwert) { für (let key in childVal) { Optionen[Schlüssel] = ChildVal[Schlüssel]; } } Rückgabemöglichkeiten; }; 4. Initialisieren Sie die ZusammenführungVue.options.components und vm.$options.components zusammenführen Vue.prototype._init = Funktion (Optionen) { const vm = dies; ++ vm.$options = mergeOptions(vm.constructor.options, options); //... : Der initState(vm); wenn (vm.$options.el) { //Daten auf dieser Vorlage mounten vm.$mount(vm.$options.el); } }; Okay, hier haben wir das Parsen globaler Komponenten implementiert. Schauen wir uns als Nächstes an, wie die Kang Kang-Komponente gerendert wird. Prinzip der KomponentendarstellungBeim Erstellen eines virtuellen Knotens müssen wir isReservedTag verwenden, um zu bestimmen, ob das aktuelle Tag eine Komponente ist. Der virtuelle Knoten eines allgemeinen Tags unterscheidet sich vom virtuellen Knoten einer Komponente. Wenn das Tag eine Komponente ist, sollte ein Komponenten-V-Knoten gerendert werden. Exportfunktion isReservedTag(str) { let reservedTag = "a,div,span,p,img,button,ul,li"; gibt reserviertesTag.includes(str) zurück; } 1. Erstellen Sie virtuelle KomponentenknotencreateComponent erstellt einen virtuellen Knoten einer Komponente und unterscheidet, ob es sich um eine Komponente handelt, indem ein Hook für die Daten vorhanden ist Exportfunktion createElement(vm, tag, data = {}, ...children) { // Wenn das Tag eine Komponente ist, sollte es den Vnode einer Komponente rendern if (isReservedTag(tag)) { returniere vnode(vm, Tag, Daten, Daten.Schlüssel, untergeordnete Elemente, undefiniert); } anders { const Ctor = vm.$options.components[tag] returniere createComponent(vm, tag, data, data.key, children, Ctor); } } //Erstelle einen virtuellen Knoten für die Komponente, um zwischen Komponenten und Elementen zu unterscheiden data.hook Funktion createComponent(vm, tag, data, key, children, Ctor) { // Komponentenkonstruktor if (isObject (Ctor)) { Ctor = vm.$options._base.extend(Ctor); // Vue.extend } data.hook = { // Diese Initialisierungsmethode muss beim Rendern der Komponente aufgerufen werden init(vnode){ let vm = vnode.componentInstance = new Ctor({_isComponent:true}); // new Sub verwendet diese Option und Komponentenkonfiguration zum Zusammenführen von vm.$mount(); // Nachdem die Komponente gemountet wurde, befindet sie sich in vnode.componentInstance.$el } } returniere vnode(vm, `vue-component-${tag}`, Daten, Schlüssel, undefiniert, undefiniert, {Ctor, untergeordnete Elemente}) } 2. Erstellen Sie den eigentlichen Knoten der Komponentetypeof-Tag === „String“, es kann ein virtueller Knoten einer Komponente sein, dann wird „createComponent“ aufgerufen. Exportfunktion Patch (alter V-Knoten, V-Knoten) { // 1. Bestimmen Sie, ob aktualisiert oder gerendert werden soll, if(!oldVnode){ gibt createElm(vnode) zurück; }anders{ // ... } } Funktion createElm(vnode) { let { tag, daten, untergeordnete Elemente, Text, vm } = vnode; wenn (Typ des Tags === "Zeichenfolge") { wenn (createComponent(vnode)) { //Gibt den realen Knoten zurück, der der Komponente entspricht return vnode.componentInstance.$el; } vnode.el = document.createElement(tag); // Der virtuelle Knoten hat ein el-Attribut, das dem realen Knoten entspricht children.forEach((child) => { vnode.el.appendChild(createElm(Kind)); }); } anders { vnode.el = document.createTextNode(text); } vnode.el zurückgeben; } createComponent bestimmt, ob die Komponente ein virtueller Knoten ist, indem es eine hook.init-Methode für die Daten gibt Wenn ja, rufen Sie data.hook.init für die Komponente auf. Erstellen Sie eine Komponenteninstanz und weisen Sie sie vnode.componentInstance zu Wenn vnode.componentInstance einen Wert hat, bedeutet dies, dass der echte DOM der entsprechenden Komponente generiert wurde. Funktion Komponente erstellen(vnode) { sei i = vnode.data; wenn((i = i.hook) && (i = i.init)){ i(v-Knoten); } wenn(vnode.componentInstance){ gibt true zurück; } } Rufen Sie die Init-Methode auf, um eine Instanz der Komponente zu erstellen und sie zu mounten. Daten.hook = { init(vnode){ let child = vnode.componentInstance = neuer Ctor({}); child.$mount(); // Komponentenmontage} } ZusammenfassungNeue Komponente (). $mount () => vm. $el Fügen Sie das $el der Komponente in den übergeordneten Container (übergeordnete Komponente) ein. Es ist geschafft! So werden Vue-Komponenten analysiert und gerendert. Weitere Einzelheiten zum Parsen und Rendern von Vue-Komponenten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Java-Beispielcode zum Generieren von zufälligen Zeichen
Beim Schreiben einer Seite kommt es häufig vor, d...
Dieser Artikel beschreibt Ihnen, wie Sie MySQL 8....
Inhaltsverzeichnis 01 Einführung in GTID 02 Wie G...
füge -it hinzu docker run -it -name test -d nginx...
Rownum ist eine einzigartige Schreibmethode in Or...
In diesem Artikel wird der spezifische Code zur I...
Inhaltsverzeichnis Konfiguration NFS-Server (nfs....
Inhaltsverzeichnis 1. Statische Implementierungsm...
Inhaltsverzeichnis Geschäftsszenario: Wirkungsdem...
Vorwort Immer noch in Bezug auf das zuvor erwähnt...
Virtuelle Maschinen sind eine sehr praktische Tes...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
Normalerweise müssen die von Benutzern hochgelade...
【Vorwort】 Ich möchte vor Kurzem das Prüfungssyste...
In diesem Artikel werden die spezifischen Schritt...