1. Szenariobeschreibung Ich weiß nicht, ob Sie diese Erfahrung schon einmal gemacht haben. Das Dropdown-Feld enthält viele Optionen, Zehntausende oder sogar mehr. Wenn Sie zu diesem Zeitpunkt alle Daten in das Dropdown-Feld eingeben und rendern, friert der Browser ein und die Erfahrung ist besonders schlecht. Einige Benutzer sagen möglicherweise, dass die Auswahl von Element-UI eine Remote-Methode hat, die die Remote-Suche unterstützt. Können wir nicht einfach den Server bitten, dies zu unterstützen? Dies ist natürlich eine Lösung. Aber manchmal ist diese Methode möglicherweise nicht anwendbar (1) Manchmal werden die serverseitigen Daten nach der Berechnung an uns zurückgegeben, und die Rückgabe erfolgt möglicherweise nicht sehr schnell, sodass die Erfahrung nicht sehr gut ist. (2) Manchmal gibt es möglicherweise nur ein paar tausend Daten, und es ist nicht sinnvoll, sie alle darzustellen. Es ist nicht sehr gut, die Schnittstelle klein zu halten. (3) Kann das Problem nur durch das Front-End gelöst werden? Wenn es gelöst werden kann, würde das nicht die Arbeit und den Druck auf dem Server reduzieren? 2. Lösung 1) Segmentiertes Laden: Die Dropdown-Elemente werden nicht geladen. Wenn Sie auf das Dropdown-Feld klicken, werden sie geladen. Zu diesem Zeitpunkt werden alle Optionen geladen. Diese Situation gilt nur für langsames Laden. Sie müssen zum Laden klicken, bevor Sie die Optionen aufklappen können. Die Erfahrung ist durchschnittlich. <el-Auswahl v-model="Benutzer-ID" filterbar :filter-method="BenutzerFilter" löschbar> <el-Option v-for="Element in Benutzerliste" :Schlüssel="item.userId" :label="item.benutzername" :Wert="Artikel.Benutzer-ID" ></el-Option> </el-Auswahl> BenutzerFilter(Abfrage = '') { lass arr = this.allUserList.filter((item) => { returniere item.username.includes(Abfrage) || item.userId.includes(Abfrage) }) wenn (arr.length > 50) { diese.Benutzerliste = arr.slice(0, 50) } anders { diese.Benutzerliste = arr } }, getUserWhiteList() { HttpRequest.post("/api/admin/community/getUserWhiteList").dann( Antwort => { diese.allUserList = Antwort.Daten.Liste; dies.userFilter() } ); }, Wie oben gezeigt, erhalten wir die Benutzerliste aus dem Hintergrund. Nach unserer eigenen Filterung rendern wir jeweils nur 50 Daten. Unabhängig davon, wie viele Daten vorhanden sind, unterstützt es eine Variable für uns und belegt Speicher. Natürlich ist die Array-Durchquerung umso langsamer, je mehr Daten vorhanden sind, aber dies hat kaum Auswirkungen. Lösung für El-Select-Komponente mit zu vielen Optionen GeschäftsszenarioWenn bei Verwendung der El-Select-Komponente zu viele Optionen vorhanden sind, treten Nachteile auf: Die Seite rendert eine große Anzahl von El-Option-Knoten, die dazu führen, dass die Seite einfriert oder sogar ganz aufhört, was zu einer sehr schlechten Benutzererfahrung führt. Das Szenario, das ich dieses Mal erlebte, war eine Situation, in der die Anzahl der Optionen 6.000 bis 9.000 betrug. Lösung Nehmen Sie die kleine Option (renderOption) des festen Elements aus den Gesamtoptionen für die Seitendarstellung heraus, indem Sie die Code-Implementierung Unten finden Sie die Komponentenkapselung von Vue <Vorlage> <el-Auswahl Klasse="yt-select" v-model="aktuellerWert" filterbar v-bind="$attrs" :filter-method="BenutzerFilter" :deaktiviert="deaktiviert" :löschbar="löschbar" @change="ändern" > <el-Option v-for="Option in Renderoption" :Schlüssel="Option.Wert" :Wert="Option.Wert" :label="Option.label" >{{ option.label }}</el-option> </el-Auswahl> </Vorlage> <Skript> Standard exportieren { Name: "easy-select", Requisiten: { Wert: { Typ: [Zeichenfolge, Zahl], Standard: '' }, max: { Typ: Nummer, Standard: 30 }, deaktiviert: Typ: Boolean, Standard: false }, löschbar: { Typ: Boolean, Standard: true }, Optionen: Typ: Array, Standard: () => [] } }, Daten () { zurückkehren { Renderoption: [] } }, berechnet: { aktuellerWert: { erhalten () { gib diesen Wert zurück || '' }, setze (Wert) { dies.$emit('Eingabe', Wert) } } }, betrachten: Wert () { dies.addValueOptions() }, Optionen: Handler (V) { dies.init() }, tief: wahr } }, erstellt () { dies.init() }, Methoden: { asynchrone Initialisierung () { dies.userFilter() dies.addValueOptions() }, addValueOptions () { wenn (dieser.aktuellerWert) { let target = this.options.find((item) => { // Finde das aktuelle Element aus der großen Option return item.value === this.currValue }) if (target) { // Vergleiche das aktuelle Element mit der kleinen Option, wenn nicht, füge hinzu if (this.renderOption.every(item => item.value !== target.value)) { this.renderOption.unshift(Ziel) } } } }, addFilterOptions (Bezeichnung) { // Stellen Sie bei jeder Suche nach einer Eingabe sicher, dass sich das Element in der Renderoption befindet, sofern es eine genaue Übereinstimmung gibt. let target = this.options.find((item) => { // Suchen Sie das aktuelle Element aus der großen Option. return item.label === label }) if (target) { // Vergleiche das aktuelle Element mit der kleinen Option, wenn nicht, füge hinzu if (this.renderOption.every(item => item.label !== target.label)) { this.renderOption.unshift(Ziel) } } }, BenutzerFilter (Abfrage = '') { lass arr = diese.Optionen.Filter((Element) => { returniere item.label.includes(Abfrage) || item.value.includes(Abfrage) }) wenn (arr.Länge > this.max) { diese.renderOption = arr.slice(0, diese.max) this.addFilterOptions(Abfrage) } anders { diese.renderOption = arr } }, ändern (Wert) { dies.$emit('ändern', Wert) if (!value) { // Einzelauswahl der Löschoptionen initialisiert this.userFilter() } } } } </Skript> Vorsichtsmaßnahmen
Dies ist das Ende dieses Artikels über die Lösung des Problems zu vieler Daten in ElementUI el-select. Weitere Informationen zum Problem zu vieler Daten in ElementUI el-select finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So installieren Sie ROS Noetic in Ubuntu 20.04
WeChat-Applet: Einfacher Rechner. Zu Ihrer Inform...
Nexus bietet RestApi, aber einige APIs müssen noc...
Meine Maschinenumgebung: Windows 2008 R2 MySQL 5....
Verwenden Sie Leinwand, um eine bunte Uhr zu schr...
NProgress ist der Fortschrittsbalken, der oben im...
Anaconda-Installation Anaconda ist ein Softwarepa...
Erster Blick auf die Wirkung: Vorwort: Auf diese ...
Inhaltsverzeichnis Zusammenfassen Zusammenfassen ...
1. Docker installieren Öffnen Sie zunächst die Li...
Wenn Sie Schaltflächen (Eingabe, Schaltfläche) sch...
Inhaltsverzeichnis 1 Versprechen Unterbrechen Sie...
1. Zunächst müssen Sie wissen, was den vertikalen ...
Ich möchte einen Artikel von Zhang Xinxu zitieren...
Inhaltsverzeichnis Vorwort Überprüfen und deinsta...
Ursache Beim Ausführen des Docker-Skripts tritt e...