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
Gespeicherte Datenbankprozeduren DROP-VERFAHREN, ...
Beim Freigeben eines Projekts müssen Sie häufig d...
Dieser Artikel erläutert anhand von Beispielen da...
.imgbox{ Breite: 1200px; Höhe: 612px; Rand rechts...
Effektbild: Implementierungscode: <Vorlage>...
1. Ziehen Sie das Bild Docker-Pull-Registrierung....
In diesem Artikel wird der spezifische Code von V...
Vorwort Zusätzlich zu den standardmäßig integrier...
Es gibt drei Hauptmethoden, CSS auf einer Seite zu...
Als Front-End-Affe werden wir, sei es während ein...
Da ich heute MySQL installieren wollte, bin ich a...
1. Immobilienliste Code kopieren Der Code lautet w...
Code kopieren Der Code lautet wie folgt: Höhe: au...
HTML Code: Code kopieren Der Code lautet wie folgt...
1. Laden Sie die erfolgreich generierte Symboldate...