Der gesamte Prozessdatensatz der rekursiven Komponentenkapselung von Vue3

Der gesamte Prozessdatensatz der rekursiven Komponentenkapselung von Vue3

Vorwort

Als 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 Komponenten

Eine 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

  • Innerhalb der rekursiven Komponente selbst muss beim Aufrufen das von ihr selbst gesendete benutzerdefinierte Ereignis über „Emit“ an die rekursive Komponente gesendet werden. Nach dem Empfang muss das benutzerdefinierte Ereignis über „Emit“ innerhalb der Komponente erneut ausgelöst werden.
  • Indem Sie auf das Klickereignis hören, können Sie über „Emit“ ein benutzerdefiniertes Ereignis auslösen und außerhalb der Komponente hören. Sie können den Rückruf auch selbst erstellen, wenn Sie Daten über Props an die Komponente übergeben, sodass Sie über „Emit“ kein benutzerdefiniertes Ereignis auslösen müssen.
  • Wenn Sie in einer rekursiven Komponente auf ein Menüelement klicken, müssen Sie die rekursive Komponente zerstören. Alles, was wir tun müssen, ist, durch Ereignisblasen in der rekursiven Komponente auf Klicks, Kontextmenüs und andere Ereignisse zu hören, um die Komponente zu zerstören, und dann das benutzerdefinierte Ereignis durch Emittieren auszulösen, damit die Außenwelt es empfangen kann, wodurch der Zweck der Zerstörung der Komponente erreicht wird.
  • Wenn Sie das Klickereignis innerhalb einer rekursiven Komponente aufrufen, müssen Sie das Aufsteigen des Ereignisses und das Standardereignis verhindern. Sie können nach dem Klickereignis click.prevent.stop hinzufügen, um Ereignisblubbern und Standardereignisse zu verhindern.

2. Klicken Sie mit der rechten Maustaste auf die Menükomponente

In 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)
  })

Zusammenfassen

Dies 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:
  • Vue3+TypeScript implementiert ein vollständiges Beispiel einer rekursiven Menükomponente
  • Rekursive Vue.js-Komponente zur Implementierung eines Baummenüs (Beispielfreigabe)
  • Vuejs verwendet rekursive Komponenten, um Baumverzeichnisse zu implementieren
  • Vue.js lernt rekursive Komponenten
  • Rekursive Vue2-Komponente zur Implementierung eines Baummenüs
  • Erfahren Sie in 10 Minuten, wie Sie rekursive Vue3-Komponenten verwenden

<<:  Detaillierte Erklärung der Datentypen und Schemaoptimierung in MySQL

>>:  Detaillierte Schritte zur Verwendung von Jib für die Docker-Bereitstellung in Spring Cloud

Artikel empfehlen

Beispiel zum Deaktivieren der Browser-Cache-Konfiguration im Vue-Projekt

Beim Freigeben eines Projekts müssen Sie häufig d...

Konzept und Anwendungsbeispiele für die MySQL-Indexkardinalität

Dieser Artikel erläutert anhand von Beispielen da...

Vue+echarts realisiert gestapelte Balkendiagramme

In diesem Artikel wird der spezifische Code von V...

Ein genauerer Blick auf die Unterschiede zwischen Link und @import

Es gibt drei Hauptmethoden, CSS auf einer Seite zu...

Sammlung gemeinsamer DIV-Attribute

1. Immobilienliste Code kopieren Der Code lautet w...

Die Hintergrundfarbe oder das Bild im Div-Container wächst mit dem Wachstum

Code kopieren Der Code lautet wie folgt: Höhe: au...

Tabelle td Bild horizontal und vertikal zentriert Code

HTML Code: Code kopieren Der Code lautet wie folgt...

favico.ico --- Schritte zum Einrichten des Website-ICO-Symbols

1. Laden Sie die erfolgreich generierte Symboldate...