In diesem Artikelbeispiel wird der spezifische Code der benutzerdefinierten Beschreibungslistenkomponente der Vue Element UI zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt RendernVorne geschrieben Beim Schreiben von Backend-Management klicken wir häufig auf die Liste, um Details anzuzeigen und Dateninformationen anzuzeigen. Obwohl Element UI eine Tabellenkomponente hat, hat es keine Beschreibungskomponente. Bisher mussten Teammitglieder in dieser Situation ihre eigenen Stile schreiben, was mühsam zu schreiben war, und die von jeder Person geschriebenen Stile waren nicht einheitlich, was den Gesamtstil des Projekts zerstörte. Welche Funktionen sind implementiert 1. Die Höhe jeder Zeile wird automatisch entsprechend der maximalen Höhe einer Spalte in der Zeile erweitert. Komponentendesign 1. Verwenden Sie die Verschachtelung von übergeordneten und untergeordneten Komponenten. Die übergeordnete Komponente ist e-desc und die untergeordnete Komponente ist e-desc-item. Kapseln Sie E-Desc-Komponenten ein<Vorlage> <div Klasse="desc" :style="{margin}"> <!-- Titel --> <h1 v-if="Titel" Klasse="desc-Titel" v-html="Titel"></h1> <el-row Klasse="desc-row"> <Steckplatz/> </el-row> </div> </Vorlage> <Skript> Standard exportieren { Name: "EDesc", // Wird den untergeordneten Komponenten über provide () { zur Verfügung gestellt. zurückkehren { Beschriftungsbreite: diese.Beschriftungsbreite, Spalte: diese.Spalte, Größe: diese.Größe } }, Requisiten: { // Datenquelle, Daten abhören und Daten neu zeichnen: { Typ: Objekt, erforderlich: wahr, Standard () { zurückkehren {} } }, // Titel: { Typ: Zeichenfolge, Standard: '' }, // Marge: { Typ: Zeichenfolge, Standard: „0“ }, // Etikettenbreite labelWidth: { Typ: Zeichenfolge, Standard: „120px“ }, Spalte: { // Die Anzahl der angezeigten Elemente pro Zeilentyp: [Zahl, Zeichenfolge], Standard: 3 }, Größe: { // Größentyp: String, Standard: '' } }, betrachten: Daten: { handler () { dies.$nextTick(() => { // Filtern Sie die Unterkomponente e-desc-item heraus const dataSource = this.$slots.default const Datenliste = [] dataSource.fürJedes(item => { wenn (item.componentOptions && item.componentOptions.tag === 'e-desc-item') { dataList.push(Element.Komponenteninstanz) } }) // Verbleibende Spanne let leftSpan = diese.Spalte const len = dataList.length dataList.forEach((item, index) => { // Behandeln Sie die Beziehung zwischen Spalte und Spanne // Die Anzahl der verbleibenden Spalten ist kleiner als die festgelegte Anzahl von Spannen const hasLeft = leftSpan <= (item.span || 1) // Die nächste Spalte der aktuellen Spalte ist größer als der verbleibende Bereich const nextColumnSpan = (index < (länge - 1)) && (datenliste[index + 1].span >= leftSpan) // Die letzte Spalte der letzten Zeile const isLast = index === (len - 1) wenn (hasLeft || nextColumnSpan || isLast) { // Wenn die oben genannten Bedingungen erfüllt sind, muss span automatisch vervollständigt werden, um zu vermeiden, dass die letzte Spalte unvollständig ist item.selfSpan = leftSpan leftSpan = diese.Spalte } anders { leftSpan -= item.span || 1 } }) }) }, tief: wahr, sofort: wahr } } } </Skript> <style scoped lang="scss"> .desc{ .desc-Titel { Rand unten: 10px; Farbe: #333; Schriftstärke: 700; Schriftgröße: 16px; Zeilenhöhe: 1,5715; } .desc-Zeile{ Anzeige: Flex; Flex-Wrap: Umwickeln; Rahmenradius: 2px; Rand: 1px durchgezogen #EBEEF5; Rahmen unten: 0; Rand rechts: 0; Breite: 100 %; } } </Stil> Kapseln Sie die e-desc-item-Komponente ein<Vorlage> <el-col :span="computedSpan" class="desc-item"> <div Klasse="desc-item-content" :Klasse="Größe"> <label class="desc-item-label" :style="{width: labelWidth}" v-html="label"></label> <div Klasse="desc-item-value" v-if="$slots"> <!-- Klartext --> <slot v-if="$slots.default && $slots.default[0].text"/> <!-- HTML --> <slot name="Inhalt" v-else-if="$slots.content"/> <span v-else>Keine Daten</span> </div> </div> </el-col> </Vorlage> <Skript> Standard exportieren { Name: 'EDescItem', einfügen: ['Beschriftungsbreite', 'Spalte', 'Größe'], Requisiten: { Spanne: { Typ: [Zahl, Zeichenfolge], erforderlich: false, Standard: 0 }, Etikett: { Typ: Zeichenfolge, erforderlich: false, Standard: '' } }, Daten () { zurückkehren { // Der eigene Span der Unterkomponente selbstSpan: 0 } }, berechnet: { berechneteSpanne() { // Der eigene Span der untergeordneten Komponente wird von der übergeordneten Komponente verwendet, um den Span zu berechnen und zu ändern wenn (this.selfSpan) { return 24 / diese.Spalte * diese.selfSpan } sonst wenn (diese.span) { // Spanne, die von Requisiten übergeben wird returniere 24 / diese.Spalte * diese.Spanne } anders { // Wenn die Spanne nicht überschritten wird, nimm die Spalte returniere 24 / diese.Spalte } } } } </Skript> <style scoped lang="scss"> .desc-Element { Rahmen rechts: 1px durchgezogen #EBEEF5; Rahmen unten: 1px durchgezogen #EBEEF5; .desc-Artikel-Inhalt { Anzeige: Flex; Inhalt ausrichten: Flex-Start; Elemente ausrichten: zentrieren; Farbe: rgba(0,0,0,.65); Schriftgröße: 14px; Zeilenhöhe: 1,5; Breite: 100 %; Hintergrundfarbe: #fafafa; Höhe: 100%; .desc-Elementbezeichnung{ Rahmen rechts: 1px durchgezogen #EBEEF5; Anzeige: Inline-Block; Polsterung: 12px 16px; Flex-Wachstum: 0; Flex-Schrumpfen: 0; Farbe: rgba(0, 0, 0, 0,6); Schriftstärke: 400; Schriftgröße: 14px; Zeilenhöhe: 1,5; Höhe: 100%; Anzeige: Flex; Elemente ausrichten: zentrieren; } .desc-Artikel-Wert{ Hintergrund: #fff; Polsterung: 12px 16px; Flex-Wachstum: 1; Überlauf: versteckt; Wörtertrennung: alles trennen; Höhe: 100%; Anzeige: Flex; Elemente ausrichten: zentrieren; Farbe: #444; Spanne{ Farbe: #aaa; } } &.klein { .desc-Artikelbezeichnung, .desc-Artikel-Wert { Polsterung: 10px 14px; } } } } </Stil> Anwendung<Vorlage> <e-desc: Daten = "Info" Rand = "0 12px" Beschriftungsbreite = "100px"> <e-desc-item label="Name">{{info.name}}</e-desc-item> <e-desc-item label="Alter">{{ info.age }} Jahre alt</e-desc-item> <e-desc-item label="Geschlecht">{{ info.sex }}</e-desc-item> <e-desc-item label="Schule">{{ info.school }}</e-desc-item> <e-desc-item label="Professionell">{{ info.major }}</e-desc-item> <e-desc-item label="Hobby">{{ info.hobby }}</e-desc-item> <e-desc-item label="Mobiltelefonnummer">{{ info.phone }}</e-desc-item> <e-desc-item label="Kontakt">{{ info.wx }}</e-desc-item> <e-desc-item label="QQ">{{ info.qq }}</e-desc-item> <e-desc-item label="Adresse">{{ info.address }}</e-desc-item> <e-desc-item label="Selbstbeschreibung" :span='2'>{{ info.intro }}</e-desc-item> <e-desc-item label="Vorgang" :span='3'> <Vorlagenslot="Inhalt"> <el-button size="small" type="primary">Ändern</el-button> <el-button size="small" type="danger">Löschen</el-button> </Vorlage> </e-desc-item> </e-desc> </Vorlage> <Skript> importiere EDesc aus './e-desc' EDescItem aus „./e-desc-item“ importieren Standard exportieren { Komponenten: EDesc, EDescItem }, Daten () { zurückkehren { Info: Name: 'Jerry', Alter: 26, Geschlecht: 'männlich', Schule: 'Sichuan University', Hauptfach: 'Professioneller Programmierer', Adresse: „Chengdu, Provinz Sichuan“, Hobby: 'Steine bewegen, Front-End, Geld verdienen', Telefon: 18888888888, wx: 'Nice2cu_Hu', QQ: 332983810, Intro: „Ich bin Maler und ich kann gut malen.“ Ich möchte das neue Haus streichen, um es schöner zu machen. Nachdem er das Dach gestrichen hatte, strich er die Wand, wobei der Pinsel fleißig umherflog. Oh meine kleine Nase, sie hat sich verändert. Ich bin Maler und verfüge über ausgeprägte malerische Fähigkeiten. Ich möchte das neue Haus streichen, um es schöner zu machen. Nachdem er das Dach gestrichen hatte, strich er die Wand, wobei der Pinsel fleißig umherflog. Oh meine kleine Nase, sie hat sich verändert. ' } } } } </Skript> Parameter BeschreibungAn diesem Punkt ist der Code fertig. Wenn es Unklarheiten oder Fehler gibt, hinterlassen Sie mir bitte eine Nachricht, um mich darüber zu informieren. 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:
|
<<: Detaillierte Schritte zur Dateisteuerungsverwaltung für Linux-Konten
>>: Tutorial zur Verwendung von Profilen in MySQL
Inhaltsverzeichnis Einführung scrollen Element.sc...
Mehrweg-Suchbaum Höhe eines vollständigen Binärba...
Wie üblich posten wir zuerst den Bildeffekt: Das ...
vue+element UI kapselt eine öffentliche Funktion ...
<br />Ich habe festgestellt, dass viele Leut...
Inhaltsverzeichnis Beim Einrichten einer MySQL-Ma...
Einführung Es ist nicht nötig, Redis im Detail vo...
1. Laden Sie das RPM-Paket für Linux herunter htt...
1. Optimierung häufig verwendeter HTML-Tags HTML ...
Dieser Artikel beschreibt, wie man eine MySQL Mas...
In diesem Artikel wird der spezifische Code von v...
Besonderer Hinweis: Dieser Artikel wurde basieren...
In diesem Artikel wird der detaillierte Vorgang z...
Lassen Sie mich zunächst ein Beispiel geben (wenn...
Inhaltsverzeichnis JS-Funktionsaufruf, Apply- und...