Vue CodeMirror realisiert den Effekt des Online-Code-Compilers

Vue CodeMirror realisiert den Effekt des Online-Code-Compilers

Vorwort

Wenn wir den Effekt der Online-Codekompilierung im Web erzielen möchten, müssen wir die Komponente vue-codemirror verwenden, die CodeMirror erneut kapselt.

  • Hervorhebung des Support-Codes
  • 62 Themenfarben, wie Monokai usw.
  • Unterstützt die Bearbeitungsmodi JSON, SQL, JavaScript, CSS, XML, HTML, YAML, Markdown und Python. Der Standard ist JSON.
  • Unterstützt die Schnellsuche
  • Unterstützt automatische Vervollständigungsaufforderungen
  • Unterstützt automatisch passende Klammern

Umgebungsvorbereitung

npm installiere jshint
npm installiere jsonlint
npm installiere Skript-Loader
npm installiere vue-codemirror

Paketkomponenten

Wir können vue-codemirror wieder in components des Projekts einbinden

<Vorlage>
  <Codespiegel
    ref="meinCm"
    v-Modell="Editorwert"
    :Optionen="cmOptionen"
    @changes="beiCmCodeChanges"
    @blur="beiCmBlur"
    @keydown.native="beiTastennachunten"
    @mousedown.native="beiMouseDown"
    @paste.native="BeimEinfügen"
  >
  </codemirror>
</Vorlage>

<Skript>
importiere { Codemirror } von „vue-codemirror“;
importiere 'codemirror/keymap/sublime'
importiere "codemirror/mode/javascript/javascript.js";
importiere "codemirror/mode/xml/xml.js";
importiere "codemirror/mode/htmlmixed/htmlmixed.js";
importiere "codemirror/mode/css/css.js";
importiere "codemirror/mode/yaml/yaml.js";
importiere "codemirror/mode/sql/sql.js";
importiere "codemirror/mode/python/python.js";
importiere "codemirror/mode/markdown/markdown.js";
importiere "codemirror/addon/hint/show-hint.css";
importiere "codemirror/addon/hint/show-hint.js";
importiere "codemirror/addon/hint/javascript-hint.js";
importiere "codemirror/addon/hint/xml-hint.js";
importiere "codemirror/addon/hint/css-hint.js";
importiere "codemirror/addon/hint/html-hint.js";
importiere "codemirror/addon/hint/sql-hint.js";
importiere "codemirror/addon/hint/anyword-hint.js";
importiere "codemirror/addon/lint/lint.css";
importiere "codemirror/addon/lint/lint.js";
importiere "codemirror/addon/lint/json-lint";
importiere 'Codemirror/Addon/Auswahl/Active-Line'
importiere "codemirror/addon/hint/show-hint.js";
importiere "codemirror/addon/hint/anyword-hint.js";
erfordern("script-loader!jsonlint");
importiere "codemirror/addon/lint/javascript-lint.js";
importiere "codemirror/addon/fold/foldcode.js";
importiere "codemirror/addon/fold/foldgutter.js";
importiere "codemirror/addon/fold/foldgutter.css";
importiere "codemirror/addon/fold/brace-fold.js";
importiere "codemirror/addon/fold/xml-fold.js";
importiere "codemirror/addon/fold/comment-fold.js";
importiere "codemirror/addon/fold/markdown-fold.js";
importiere "codemirror/addon/fold/indent-fold.js";
importiere "codemirror/addon/edit/closebrackets.js";
importiere "codemirror/addon/edit/closetag.js";
importiere "codemirror/addon/edit/matchtags.js";
importiere "codemirror/addon/edit/matchbrackets.js";
importiere "codemirror/addon/selection/active-line.js";
importiere "codemirror/addon/search/jump-to-line.js";
importiere "codemirror/addon/dialog/dialog.js";
importiere "codemirror/addon/dialog/dialog.css";
importiere "codemirror/addon/search/searchcursor.js";
importiere "codemirror/addon/search/search.js";
importiere "codemirror/addon/display/autorefresh.js";
importiere "codemirror/addon/selection/mark-selection.js";
importiere "codemirror/addon/search/match-highlighter.js";
Standard exportieren {
  Name: "Index",
  Komponenten: {codemirror},
  Requisiten: ["cmTheme", "cmMode", "cmIndentUnit", "autoFormatJson"],
  Daten() {
    zurückkehren {
      Editorwert: '{}',
      cmOptions: {
        :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::
          "CodeMirror-Lint-Marker",
          "CodeMirror-Zeilennummern",
          "CodeMirror-Foldgutter"
        ],
        HighlightSelectionMatches: {
          minZeichen: 2,
          Stil: "Matchhighlight",
          showToken: wahr
        },
      },
      enableAutoFormatJson: this.autoFormatJson == null ? true : this.autoFormatJson, // Ob im JSON-Bearbeitungsmodus automatisch formatiert werden soll, wenn das Eingabefeld den Fokus verliert, true zum Aktivieren, false zum Deaktivieren}
  },
  erstellt() {
    versuchen {
      wenn (!this.editorValue) {
        this.cmOptions.lint = falsch;
        zurückkehren;
      }
      wenn (this.cmOptions.mode === "application/json") {
        wenn (!this.enableAutoFormatJson) {
          zurückkehren;
        }
        dieser.editorValue = dieser.formatStrInJson(dieser.editorValue);
      }
    } fangen (e) {
      console.log("Fehler beim Initialisieren von Codemirror: " + e);
    }
  },
  Methoden: {
    zurücksetzenLint() {
      wenn (!this.$refs.myCm.codemirror.getValue()) {
        dies.$nextTick(() => {
          dies.$refs.myCm.codemirror.setOption("lint", false);
        });
        zurückkehren;
      }
      dies.$refs.myCm.codemirror.setOption("lint", false);
      dies.$nextTick(() => {
        dies.$refs.myCm.codemirror.setOption("lint", true);
      });
    },
    //String als JSON-Formatstring formatieren formatStrInJson(strValue) {
      JSON.stringify zurückgeben(
        JSON.parse(strValue),
        null,
        diese.cmIndentUnit
      );
    },
    onCmCodeChanges(cm, Änderungen) {
      this.editorValue = cm.getValue();
      dies.resetLint();
    },
    // Handhabungsfunktion bei Fokusverlust onCmBlur(cm, event) {
      versuchen {
        let editorValue = cm.getValue();
        wenn (this.cmOptions.mode === "application/json" && editorValue) {
          wenn (!this.enableAutoFormatJson) {
            zurückkehren;
          }
          dieser.editorValue = dieser.formatStrInJson(editorValue);
        }
      } fangen (e) {
        // Nichts tun}
    },
    //Tastatur-Ereignisverarbeitungsfunktion onKeyDown(event) {
      const keyCode = event.keyCode || Ereignis.welches || Ereignis.charCode;
      const Schlüsselkombination =
          Ereignis.Strg-Taste || Ereignis.Alt-Taste || Ereignis.Meta-Taste;
      if (!Schlüsselkombination && Schlüsselcode > 64 && Schlüsselcode < 123) {
        dies.$refs.myCm.codemirror.showHint({ completeSingle: false });
      }
    },
    //Ereignisverarbeitungsfunktion beim Drücken der Maus onMouseDown(event) {
      dies.$refs.myCm.codemirror.closeHint();
    },
    // Paste-Ereignisverarbeitungsfunktion OnPaste(event) {
      wenn (this.cmOptions.mode === "application/json") {
        versuchen {
          dieser.editorValue = dieser.formatStrInJson(dieser.editorValue);
        } fangen (e) {
          // Nichts tun}
      }
    },
  }
}
</Skript>

<Stilbereich>

</Stil>

Diese Komponente ist standardmäßig mit einem JSON-Compiler konfiguriert. cmOptions enthält Konfigurationselemente für den Code-Compiler. Wenn Sie zusätzliche Funktionen benötigen, können Sie auch auf die offizielle Dokumentationskonfiguration verweisen. Als Nächstes sehen Sie sich den Anzeigeeffekt an

Sie können sehen, dass wir eine Zeichenfolge im JSON-Format eingegeben haben. Selbst wenn das Format falsch ist, erhalten wir eine Fehlermeldung und die Formatierung wird automatisch für uns durchgeführt.

Python-Compiler

Die Komponente, die wir kapseln, ist standardmäßig ein JSON-Compiler. Wenn wir andere Sprachen verwenden möchten, ist das auch sehr einfach. Wir müssen nur den Modus anderer Sprachen importieren.

<Vorlage>
  <div>
    <el-button type="primary" icon="el-icon-circle-check-outline" @click="handleConfirm" rund>
      Klicken Sie auf Speichern</el-button>
    <el-button icon="el-icon-caret-right" type="info" @click="handleRunCode" rund>
      Online ausführen</el-button>
  <Code-Editor
    :cmTheme="cmTheme"
    :cmMode="cmModus"
  >
  </code-editor>
  </div>
</Vorlage>

<Skript>
importiere CodeEditor aus '@/components/CodeEditor/index'
importiere 'codemirror/theme/monokai.css' // Importiere das Monokai-Design importiere 'codemirror/mode/python/python.js' // Importiere Python
Standard exportieren {
  Name: "Index",
  Komponenten:
    CodeEditor
  },
  Daten() {
    zurückkehren {
      cmThema: "monokai",
      cmMode: "python",
    }
  },
  Methoden: {
    handleBestätigen() {},
    handleRunCode() {}
  }
}
</Skript>

<Stil>
.CodeMirror {
  Position: relativ;
  Höhe: 100vh;
  Überlauf: versteckt;
  Rand oben: 10px;
}
</Stil>
<style lang="scss" scoped>
</Stil>

Die Wirkung ist wie folgt

Dies ist das Ende dieses Artikels über die Implementierung des Online-Code-Compilers von Vue Codemirror. Weitere relevante Inhalte zum Online-Code-Compiler von Vue Codemirror 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:
  • Vue implementiert SQL-Codeformatierungsfunktion im Codemirror-Codeeditor
  • Verwenden Sie das Codemirror-Plugin, um die Code-Editor-Funktion im Vue-Projekt zu implementieren
  • Zwei Möglichkeiten, Codemirror in Vue zu verwenden
  • Bei der Verwendung von Codemirror in Vue sind Probleme aufgetreten
  • Detailliertes Beispiel für die Verwendung von Codemirror in Vue
  • Verwenden Sie Vue Demi, um eine Komponentenbibliothek zu erstellen, die sowohl mit Vue2 als auch mit Vue3 kompatibel ist

<<:  Docker-Compose-Installationsmethode für die YML-Dateikonfiguration

>>:  MySQL führt Befehle für externe SQL-Skriptdateien aus

Artikel empfehlen

Sollte ich für das mobile Web-WAP Bootstrap oder jQuery Mobile verwenden?

Lösung des Problems Bootstrap ist ein CSS-Framewo...

So schreiben Sie speichereffiziente Anwendungen mit Node.js

Inhaltsverzeichnis Vorwort Problem: Kopieren groß...

Verwenden Sie reines JS, um den sekundären Menüeffekt zu erzielen

In diesem Artikelbeispiel wird der spezifische JS...

JavaScript zum Erzielen eines Fensteranzeigeeffekts

In diesem Artikel wird der spezifische JavaScript...

Docker stellt eine Verbindung zum Host-Mysql-Vorgang her

Heute muss das Unternehmensprojekt Docker konfigu...

Zusammenfassung gängiger MySQL-Befehle

Festlegen des MySQL-Root-Passworts Melden Sie sic...

Datenabfragevorgang im MySQL-JSON-Format

Der Standardtabellenname ist „base_data“ und der ...

Lösung für Front-End-Browser-Schriftgrößen von weniger als 12 Pixel

Vorwort Als ich kürzlich an einem Projekt arbeite...

Häufige Probleme und Lösungen beim Erstellen von MySQL MGR

Inhaltsverzeichnis 01 Häufige Fehler 1 02 Häufige...

Vue + ElementUI implementiert Paging-Funktion - MySQL-Daten

Inhaltsverzeichnis 1. Problem 2. Lösung 2.1 Pagin...

Vue3.x verwendet mitt.js für die Komponentenkommunikation

Inhaltsverzeichnis Schnellstart Anwendung Grundpr...

JavaScript Canvas Tetris-Spiel

Tetris ist ein sehr klassisches kleines Spiel, un...

So fügen Sie Konfigurationsoptionen zum Discuz!-Forum hinzu

Discuz! Forum verfügt über zahlreiche Konfiguratio...

WeChat-Applet implementiert SMS-Login in Aktion

Inhaltsverzeichnis 1. Vorschau der Schnittstellen...