Vue3.0 ist bereits seit einiger Zeit auf dem Markt und es ist notwendig, sich damit zu befassen! Schauen wir uns zunächst den Effekt an, den wir erzielen möchten Es ist sehr üblich, den Inhalt des Menüelements zu erweitern. Wie entwickelt man es in vue3.0? Hier verwenden wir den Standardstil von Bootstrap Idee 1:<DropDown :title="'Beenden'" :list="menuLists" /> Idee 2:<dropdown :title="'Beenden'"> <drop-dowm-item>Neuen Artikel erstellen</drop-down-item> <drop-dowm-item>Artikel bearbeiten</drop-down-item> <drop-dowm-item>Persönliche Informationen</drop-down-item> </Dropdown> Beide Ideen sind gut. Im Vergleich dazu ist die zweite Idee klarer. Wenn Sie sie verwenden, kennen Sie die spezifische Ebene, die auch der Modus der ElementUI-Komponentenentwicklung ist. DropDown.ts <Vorlage> <div Klasse="dropdown" ref="dropDownRef"> <a @click.prevent="toggleOpen" Klasse = "btn btn-sekundäres Dropdown-Umschalten" href="#" rel="externes Nofollow" > {{ Titel }} </a> <div Klasse="Dropdown-Menü" :style="{ Anzeige: 'block' }" v-show="istOffen"> <Steckplatz></Steckplatz> </div> </div> </Vorlage> js-Teil <script lang="ts"> importiere { defineComponent, ref, onMounted, onUnmounted, watch } von "vue"; importiere useClickOutside von "../hooks/useClickOutside"; exportiere StandarddefiniereKomponente({ Name: "DropDown", Requisiten: { Titel: Typ: Zeichenfolge, erforderlich: wahr, }, }, setup(Kontext) { const isOpen = ref(false); //vue3.0 ruft die Referenz des DOM-Objekts ab const dropDownRef = ref<null | HTMLElement>(null); const toggleOpen = () => { istOpen.value = !istOpen.value; }; const handleClick = (e: Mausereignis) => { console.log(e.target, "e"); wenn (dropDownRef.value) { Konsole.log(dropDownRef.value); Wenn ( //contains bestimmt, ob der Knoten den Knoten enthält!dropDownRef.value.contains(e.target as HTMLElement) && istOffen.Wert ) { istOffen.Wert = falsch; } } }; beimMounted(() => { //Globales Klickereignis registrieren document.addEventListener("click", handleClick); }); beiUnmountet(() => { //Bindung aufheben document.removeEventListener("click", handleClick); }); zurückkehren { istOffen, UmschaltenÖffnen, DropdownRef, }; }, }); </Skript> DropDownItem.ts <Vorlage> <li class="dropdown-option" :class="{ 'is-disabled': deaktiviert }"> <Steckplatz></Steckplatz> </li> </Vorlage> <Stilbereich> /* Hier muss der Schlitz eindringen*/ .dropdowm-option.ist-deaktiviert >>> * { Farbe: #6c757d; Zeigerereignisse: keine; Hintergrundfarbe: transparent; } </Stil> <script lang="ts"> importiere { defineComponent } von "vue"; exportiere StandarddefiniereKomponente({ Requisiten: { deaktiviert: Typ: Boolean, Standard: false, }, }, aufstellen() { zurückkehren {}; }, }); </Skript> An diesem Punkt ist die Komponente fertig. Aber ... wir können sehen, dass das Ereignis des Klickens zum Ausblenden des gesamten Dokuments für die gesamte Komponente nicht sehr relevant ist, sodass wir es in einen Hook extrahieren können useClickOutside.ts importiere { ref, onMounted, onUnmounted,Ref } von 'vue' const useClickOutside = (elementRef:Ref<null | HTMLElement>) => { const isClickOutside = ref(false) const handler = (e: Mausereignis) => { Konsole.log(elementRef.value); wenn (elementRef.value) { wenn (elementRef.value.contains(e.target as HTMLElement)) { isClickOutside.value = false } anders { isClickOutside.value = true } } } beimMounted(() => { document.addEventListener("klicken", Handler); }); beiUnmountet(() => { document.removeEventListener("Klick", Handler); }); returniere isClickOutside } Export-Standard useClickOutside Dann schreiben Sie unsere DropDown.ts-Komponente neu //Lösche die bestehende Ereignislogik<script lang="ts"> ... const isClickOutside = useClickOutside(dropDownRef); /* console.log(isClickOutside.value, "isClickOutside"); */ //Führen Sie die Überwachungsmethode ein. Wenn sich die Daten ändern, ändern wir den Wert von isOpen auf false. watch(isClickOutside, (neuerWert) => { wenn (isOpen.value && isClickOutside.value) { istOffen.Wert = falsch; } }); ... </Skript> Es wird der gleiche Effekt erzielt und der Code der gesamten Komponente wird zudem erheblich vereinfacht! Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Lösen Sie das Problem des IDEA-Konfigurations-Tomcat-Startfehlers
>>: Bestimmen Sie anhand von Beispielen, ob das MySQL-Update die Tabelle sperrt
Welche Funktion hat dieses Schlüsselattribut? Sch...
Inhaltsverzeichnis Tutorial-Reihe 1. Beschreibung...
1. Installieren Sie Abhängigkeitspakete [root@loc...
Die Bildintegrationstechnologie, die von YAHOO in...
Closures sind eines der traditionellen Features r...
Beim Erstellen einer Datenbank und Schreiben eine...
Bitte öffnen Sie die Testseite in einem gängigen ...
Das Div+CSS-Layout zur Erzielung einer 2-Enden-Au...
In diesem Artikel werden die spezifischen Schritt...
Im Projekt gibt es eine Tabelle, die online bearb...
Inhaltsverzeichnis Auswirkungen Dokumentation ers...
SVN ist die Abkürzung für Subversion, ein Open-So...
Wir verwenden normalerweise Float-Layout, um die ...
Inhaltsverzeichnis 1 Eine kurze Einführung in den...
Inhaltsverzeichnis Benutzerdefinierte Vite-Plugin...