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
Inhaltsverzeichnis Vorwort Stil Funktion Beschrei...
1. Der Unterschied zwischen Forward-Proxy und Rev...
Kürzlich hat Microsoft das Serversystem 2019 verö...
Funktion 0. Aktuelle Uhrzeit anzeigen Befehl: sel...
Bei Verwendung eines Cloud-Servers stellen wir ma...
Vorwort Bevor wir über den Deckungsindex sprechen...
1. Ich habe ein VPS- und CentOS-System gekauft un...
Was ist JDK? Nun, wenn Sie diese Frage nicht kenn...
Wie lässt sich bei einem unbekannten Server oder ...
Inhaltsverzeichnis 1. Verwenden Sie JavaScript, u...
Vorwort Als ich kürzlich ein Projekt erstellte, d...
Der zu erzielende Effekt ist: Festes Vergrößern a...
<br />Vor Kurzem hat UCDChina eine Artikelse...
Ich erinnere mich, dass es vor ein paar Jahren in...
Inhaltsverzeichnis 1. Master-Slave-Replikation Ma...