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
Inhaltsverzeichnis Dienstprogramme: Verwendung in...
Inhaltsverzeichnis Vorne geschrieben Umgebungsber...
Ein ES-Image vom Docker-Hub heruntergeladen, Vers...
Um die Verarbeitungsleistung und Parallelität zu ...
Um eine inkrementelle Sicherung der MySQL-Datenba...
Es gibt zwei spezielle Werte, die jeder Eigenscha...
Einführung Inkrementelles Backup bedeutet, dass n...
1. Entpacken Sie das Zip-Paket in das Installatio...
Die Schritte zum Konfigurieren von Tomcat in IDEA...
Vorwort Projektanforderungen: Installieren Sie da...
Tastaturzeichen Englisch ` Rückwärtszitat ~ Tilde...
Finden Sie das Problem Beim Abrufen der wichtigst...
Inhaltsverzeichnis 1. Einführung in SELinux 2. Gr...
Schritte zur Annotation von Metadeklarationen: 1. ...
Code kopieren Der Code lautet wie folgt: <span...