VorwortAls ich heute an einem Projekt schrieb, stellte ich fest, dass ich ein benutzerdefiniertes Rechtsklickmenü brauchte. Da das Menü Untermenüs enthält, werden derzeit rekursive Komponenten verwendet. Deshalb habe ich diesen Artikel geschrieben, um den Prozess des Schreibens rekursiver Komponenten aufzuzeichnen. 1. Rekursive KomponentenEine rekursive Komponente ruft sich, wie der Name schon sagt, innerhalb der Komponente selbst auf. Also erstellen wir zuerst eine Komponente und rufen sie innerhalb dieser Komponente auf. Die gemeinsame rekursive Komponente ist die Baumkomponente, die in unseren Projekten häufig verwendet wird. Unten finden Sie den Quellcode einer rekursiven Komponente, die ich implementiert habe, um die Projektanforderungen zu erfüllen. <Vorlage> <ul Klasse="Listencontainer"> <li v-for="(Element, Index) in Listendaten" :Schlüssel="Index" Klasse="Listenelement" @click.prevent.stop="Klickhandle($event,item)" @mouseover="childrenMenuIndex=index" > <span class="list-item_span"> {{item.text}} </span> <CaretRightOutlined v-if="item.children" /> <!-- Bestimmen Sie, ob es sich selbst aufrufen soll --> <div v-if="item.children&&childrenMenuIndex===index" Klasse = "Kontextmenü Kontextmenü_untergeordnet" > <!-- Aufruf der Komponente selbst --> <list-comp: list-data = "Element.Kinder" @hideContextMenu = "hideContextMenuEvent" /> </div> </li> </ul> </Vorlage> <Skript> importiere { defineComponent, ref } von "vue"; importiere {CaretRightOutlined} aus '@ant-design/icons-vue'; exportiere StandarddefiniereKomponente({ Name: „Liste-Comp“, Requisiten:{ Listendaten: { Typ: Array, Standard:()=>[] } }, Komponenten: { CaretRechtsUmrissen }, gibt aus: "Kontextmenü ausblenden" ], setup(Eigenschaften,{emit}){ //Klick-Ereignis const handleClick=(event,{text,callBack})=>{ emittieren('Kontextmenü ausblenden'); //callBack ist die von Ihnen übergebene Callback-Funktion. Wenn sie übergeben wird, wird die benutzerdefinierte Callback-Funktion aufgerufen, wenn (callBack) { Rückruf(); zurückkehren; } } const hideContextMenuEvent=()=>{ emittieren('Kontextmenü ausblenden'); } //Wird verwendet, um das aktuell ausgewählte Menüelement zu identifizieren const childrenMenuIndex=ref(-1); const eventNames=['Klick','Kontextmenü']; beim Montieren(()=>{ Ereignisnamen.fürJeden(Ereignisname=>window.addEventListener(Ereignisname,hideContextMenuEvent)) }) beiVorUnmount(()=>{ Ereignisnamen.fürJeden(Ereignisname=>Fenster.entfernenEventListener(Ereignisname,hideContextMenuEvent)) }) zurückkehren { GriffKlicken, KinderMenüIndex, Kontextmenüereignis ausblenden } } }) </Skript> Vorsichtsmaßnahmen
2. Klicken Sie mit der rechten Maustaste auf die MenükomponenteIn meinem Projekt verwende ich Komponenten, um das Rechtsklickmenü zu implementieren. Natürlich kann es auch durch Plug-Ins implementiert werden. Das Rechtsklickmenü ist hier im Wesentlichen eine sekundäre Kapselung der rekursiven Komponente. Tatsächlich ist keine sekundäre Kapselung erforderlich. Sie können die rekursive Komponente direkt als Rechtsklickmenü verwenden. <Vorlage> <teleportieren zu='body' > <div Klasse="Inhaltsmenü_Container" :style="styleObj"> <Listenkomp. :list-data='Menüdaten' @hideContextMenu='windowClickHandler' /> </div> </teleportieren> </Vorlage> <Skript> importiere { defineComponent } von "vue"; importiere ListComp aus "./list-comp.vue" exportiere StandarddefiniereKomponente({ Name:"Kontextmenü", Komponenten: { ListenComp }, Requisiten:{ StilObj: { Typ: Objekt, Standard:()=>{} }, MenüDaten:{ Typ: Array, Standard:()=>[] } }, gibt aus: ['Kontextmenü schließen'], setup(Eigenschaften,{emit}){ const windowClickHandler=()=>{ emittieren('Kontextmenü schließen') }; zurückkehren { FensterClickHandler, } } }) </Skript> Vorsichtsmaßnahmen Wenn Sie das Rechtsklickmenü in einem Projekt aufrufen, müssen Sie zuerst das Rechtsklickmenüereignis des Fensters selbst deaktivieren. Implementieren Sie dann Ihre eigenen benutzerdefinierten Menüereignisse. Der Implementierungscode wird unten angezeigt. const showContextMenu=(Ereignis)=>{ //Standardereignisse deaktivieren und Aufsteigen verhindern event.stopPropagation(); event.preventDefault(); Zustand.showContextMenu=true; Zustand.styleObj={ links:event.clientX+ "px", oben:event.clientY+'px' } } //Überwachen Sie das Rechtsklickmenüereignis des Fensters selbst onMounted(()=>{ window.addEventListener('Kontextmenü',Kontextmenü anzeigen) }) beiVorUnmount(()=>{ window.removeEventListener('Kontextmenü',Kontextmenü anzeigen) }) ZusammenfassenDies ist das Ende dieses Artikels über die rekursive Komponentenkapselung von Vue3. Weitere relevante Inhalte zur rekursiven Komponentenkapselung von Vue3 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:
|
<<: Detaillierte Erklärung der Datentypen und Schemaoptimierung in MySQL
>>: Detaillierte Schritte zur Verwendung von Jib für die Docker-Bereitstellung in Spring Cloud
Vorwort Die Zeichenfolgentypen der MySQL-Datenban...
Vorwort: Im MySQL-System gibt es viele verschiede...
Zusammenfassung: Viele Unternehmen, sogar die meis...
Im Frontend-Designentwurf sieht man oft Schließen...
Herstellen einer Verbindung mit MySQL Hier verwen...
Jenkins ist ein Open-Source-Softwareprojekt. Es h...
In diesem Artikel wird der spezifische Code von V...
Inhaltsverzeichnis 1. Einleitung 2. Bereiten Sie ...
In diesem Projekt wird der Docker-Container zum E...
Das <marquee>-Tag ist ein Tag, das paarweis...
Wie fügt man CSS in HTML ein? Es gibt drei Möglic...
<br />Um die Tabellenstruktur im Quellcode d...
Seit der Geburt von vue3 ist viel Zeit vergangen ...
Inhaltsverzeichnis 1. Analyse des wichtigsten Que...
Ich benutze den vi-Editor seit mehreren Jahren, h...