Ein Beispiel für das elegante Schreiben von Statusbeschriftungen im Vue-Hintergrund

Ein Beispiel für das elegante Schreiben von Statusbeschriftungen im Vue-Hintergrund

Vorwort

Bei der Entwicklung von Backend-Systemen werden häufig einige Statusfelder für Listen angezeigt, z. B. Überprüfungsstatus, Status der Rückgabeanwendung usw., und sie werden häufig von Listenabfragebedingungen zur Statusfilterung begleitet. Gleichzeitig entspricht die Statusanzeige unterschiedlichen Farben. Beim Schreiben von Code machen manche Leute oft Folgendes:

<Vorlage>
  <el-form :model="Abfrage">
    <el-form-item label="Genehmigungsstatus" prop="status">
      <el-select v-model="query.status" löschbar>
        <el-Option
          v-for="Element in Statusoptionen"
          :Schlüssel="Artikel.Wert"
          :label="Artikel.label"
          :Wert="Artikel.Wert"
        />
      </el-Auswahl>
    </el-form-item>
    <el-form-item>
      <el-button type="primary">Abfrage</el-button>
      <el-button type="danger">Zurücksetzen</el-button>
    </el-form-item>
  </el-form>
  <el-table :data="Liste">
    <el-table-column label="Genehmigungsstatus">
      <template #default="{ Zeile }">
        <el-tag v-if="row.status === 0" type="primary">Wird überprüft</el-tag>
        <el-tag v-if="row.status === 1" type="success">Überprüfung erfolgreich</el-tag>
        <el-tag v-if="row.status === 2" type="danger">Prüfung fehlgeschlagen</el-tag>
      </Vorlage>
    </el-Tabellenspalte>
  </el-Tabelle>
</Vorlage>
Standard exportieren {
  Daten() {
    zurückkehren {
      Abfrage: {
          Status: null
      },
      Statusoptionen: [
          { label: 'Wird überprüft', value: 0 },
          { label: 'Überprüfung erfolgreich', value: 1 },
          { label: 'Audit fehlgeschlagen', value: 2 }
      ],
      Liste: []
    }
  }
}

Obwohl der obige Code die Anforderungen erfüllt, ist er nicht elegant genug und der Code-Wartungsaufwand ist hoch:

  • Das Tag ist mit zu vielen v-ifs gefüllt und die Daten in den Daten werden wiederholt, was zu Redundanz führt.
  • Bei Ergänzungen oder Änderungen müssen mehrere Stellen geändert werden. Wenn beispielsweise der Text geändert wird, müssen sowohl das Dropdown-Feld als auch die Tabelle geändert werden.
  • Besitzen mehrere Seiten diesen anzuzeigenden Status, wird durch Kopieren und Einfügen der Änderungsaufwand bei geänderten Anforderungen zwangsläufig steigen.

Optimierung

Als Reaktion auf die oben genannten Probleme werden wir die folgenden Maßnahmen ergreifen, um sie zu beheben.

Variablen extrahieren

Erstellen Sie eine Konstantendatei zum Speichern von Statusoptionen, fügen Sie das Typfeld der El-Tag-Komponente hinzu, um verschiedene Farben zu unterscheiden und anzuzeigen, und exportieren Sie sie schließlich.

// const/index.js
// Prüfstatus const statusOptions = [
  { label: 'Wird überprüft', value: 0, type: 'primary' },
  { label: 'Überprüfung erfolgreich', value: 1, type: 'success' },
  { Label: 'Audit fehlgeschlagen', Wert: 2, Typ: 'Gefahr' }
]

exportieren {
  Statusoptionen
}

Sekundärverpackung von El-Tag-Komponenten

// Komponenten/Statistik-Tag.vue
<Vorlage>
  <el-tag :type="getValue('type')">
    {{ getValue('Bezeichnung') }}
  </el-tag>
</Vorlage>
Standard exportieren {
  Name: 'StatusTag',
  
  Requisiten: {
    Optionen:
      Typ: Array,
      erforderlich: wahr,
      Standard: () => []
    },
    Status: {
      Typ: [Zeichenfolge, Zahl],
      erforderlich: true
    }
  },
  
  berechnet: {
    getValue({ Optionen, Status }) {
      return (Schlüssel) => {
        const item = Optionen.finden(e => e.value === status)
        return (Artikel && Artikel[Schlüssel]) || ''
      }
    }
  }
}

verwenden

<Vorlage>
  <el-form :model="Abfrage">
    <el-form-item label="Genehmigungsstatus" prop="status">
      <el-select v-model="query.status" löschbar>
        <el-Option
          v-for="Element in Statusoptionen"
          :Schlüssel="Artikel.Wert"
          :label="Artikel.label"
          :Wert="Artikel.Wert"
        />
      </el-Auswahl>
    </el-form-item>
    <el-form-item>
      <el-button type="primary">Abfrage</el-button>
      <el-button type="danger">Zurücksetzen</el-button>
    </el-form-item>
  </el-form>
  <el-table :data="Liste">
    <el-table-column label="Genehmigungsstatus">
      <template #default="{ Zeile }">
        <!-- Verwendung -->
        <Status-Tag 
          :Optionen="Statusoptionen"
          :status="Zeile.status"
        />
      </Vorlage>
    </el-Tabellenspalte>
  </el-Tabelle>
</Vorlage>
importiere StatusTag aus '@/components/status-tag'
// Importimport { statusOptionen } von '@/const'

Standard exportieren {
  Komponenten:
    StatusTag
  },
  
  Daten() {
    zurückkehren {
      Statusoptionen
    }
  }
}

Wenn es nach der Optimierung Änderungen gibt, müssen Sie nur die Datei const/index.js ändern, ohne sie überall ändern zu müssen.

// const/index.js
// Prüfstatus const statusOptions = [
  { label: 'Wird überprüft', value: 0, type: 'primary' },
  { label: 'Überprüfung erfolgreich', value: 1, type: 'success' },
  { Bezeichnung: 'Auditfehler', Wert: 2, Typ: 'Gefahr' },
  // Stornierungsstatus hinzufügen { Bezeichnung: 'Überprüfung abgebrochen', Wert: 3, Typ: 'Warnung' }
]

exportieren {
  Statusoptionen
}

Zusammenfassen

Dies ist das Ende dieses Artikels über das elegante Schreibstatus-Label im Vue-Hintergrund. Weitere relevante Inhalte zum Schreibstatus-Label von Vue 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!

<<:  Der Prozess des SSH-Dienstes basierend auf der Schlüsselauthentifizierung im Linux-System

>>:  Die MySQL-Version ist niedriger als die, die keine zwei Werte vom Typ Zeitstempel unterstützt.

Artikel empfehlen

Zwei Möglichkeiten zum vollständigen Löschen von Benutzern unter Linux

Linux-Betrieb Experimentelle Umgebung: Centos7-Vi...

Gemeinsame Eigenschaften des Framesets (Unterteilung von Frames und Fenstern)

Ein Frame ist ein Webseitenbildschirm, der in mehr...

mysql5.6.zip-Format komprimierte Version Installations-Grafik-Tutorial

Vorwort: MySQL ist ein relationales Datenbankverw...

Lernen Sie die Grundlagen der JavaScript-DOM-Operationen in einem Artikel

DOM-Konzepte DOM: Dokumentobjektmodell: Das Dokum...

Detaillierte Erklärung des MySQL-Datenbankindex

Inhaltsverzeichnis 1. Einführung in den MySQL-Ind...

So erstellen Sie LVM für das XFS-Dateisystem in Ubuntu

Vorwort Die logische Datenträgerverwaltung von lv...

So stellen Sie einen Code-Server mit Docker bereit

Ziehen Sie das Bild # Docker-Pull Codercom/Code-S...

27 Linux-Befehle zum Bearbeiten von Dokumenten, die es wert sind, gesammelt zu werden

Linux-Befehl „col“ Der Linux-Befehl col wird zum ...

So stellen Sie LNMP und phpMyAdmin in Docker bereit

Umweltvorbereitung: Stellen Sie lnmp auf einem Ho...

Ein QQ-Chatroom basierend auf vue.js

Inhaltsverzeichnis Einführung Nachfolgend sehen S...