Implementierung des Markdown-Renderings in einer Vue-Einzelseitenanwendung

Implementierung des Markdown-Renderings in einer Vue-Einzelseitenanwendung

Beim Rendern von Markdown habe ich zuvor den Vorschaumodus von mavonEditor verwendet, der recht praktisch zu verwenden war. Ich musste nur Komponenten importieren, aber bei der jüngsten Entwicklung bin ich auf Schwierigkeiten gestoßen.

Das Hauptproblem besteht darin, dass als Single-Page-Anwendung die Links innerhalb der Site über Router-Link umgeleitet werden müssen. Wenn standardmäßig ein von mavonEditor gerenderter Tag verwendet wird, wird die Seite neu geladen, was zu einer schlechten Benutzererfahrung führt.

Dynamisches Rendering

Wenn Sie den Router-Link basierend auf Benutzerinhalten im Frontend dynamisch rendern möchten, müssen Sie dynamisches Rendering verwenden. Laut der offiziellen Dokumentation können Sie vue.config.js direkt ändern:

// vue.config.js
modul.exporte = {
 LaufzeitCompiler: true
}

Markdown rendern

Der Autor verwendet Markdown-it. Der Konfigurationsprozess ist wie folgt:

Installieren

npm install markdown-it --save # Markdown-it-Hauptteil npm install markdown-it-highlightjs --save # Code-Hervorhebung npm install markdown-it-katex --save # Latex-Unterstützung

Hier sind zwei zusätzliche Syntax-Plugins installiert. Wenn Sie weitere Plugins benötigen, können Sie diese auf npm suchen.

Statischer Dateiimport

Highlight.js
Über CDN importieren und in index.html einfügen:

<link rel="stylesheet" href="//cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/styles/default.min.css" rel="externes nofollow" >
<script src="//cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/highlight.min.js"></script>

github-markdown-css

Markdown-Stile

Installieren

npm installiere github-markdown-css --save

Import

Fügen Sie die Datei main.js hinzu

importiere „github-markdown-css/github-markdown.css“

katerina

Über CDN importieren und in index.html einfügen:

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css" rel="externes nofollow" >

verwenden

Erstellen Sie zunächst die Datei Markdown.vue im components .

<Vorlage>
 <Komponenten: ist = "html" Klasse = "markdown-body"></Komponenten>
</Vorlage>

<Skript>
importiere MarkdownIt von „markdown-it“
importiere hljs aus „markdown-it-highlightjs“
Latex aus „markdown-it-katex“ importieren
Standard exportieren {
 Name: "Markdown",
 Requisiten: {
  Inhalt: Zeichenfolge
 },
 Daten: () => ({
  md:null
 }),
 berechnet: {
  //Verwende computed, um HTML während der dynamischen Bindung dynamisch zu aktualisieren: function () {
   let res = dies.md.render(dieser.Inhalt)
   // Verwenden Sie reguläre Ausdrücke, um In-Site-Links durch Router-Link-Tags zu ersetzen. res = res.replace(/<a href="(?!http:\/\/|https:\/\/)(.*?)" rel="external nofollow" >(.*?)<\/a>/g, '<router-link to="$1">$2</router-link>')
   // Verwenden Sie reguläre Ausdrücke, um externe Links in neuen Fenstern zu öffnen. res = res.replace(/<a href="(.*?)" rel="external nofollow" >(.*?)<\/a>/g, '<a href="$1" rel="external nofollow" target="_blank">$2</a>')
   zurückkehren {
    Vorlage: '<div>' + res + '</div>'
   }
  }
 },
 erstellt () {
  this.md = neues MarkdownIt()
  dies.md.verwenden(hljs).verwenden(latex)
 }
}
</Skript>

Importieren Sie es dann, wo immer Sie es verwenden möchten

<Vorlage>
  <div>
    <Markdown :content="Inhalt"/>
  </div>
</Vorlage>

<Skript>
Importieren Sie Markdown aus „@/components/Markdown.vue“.
Standard exportieren {
 Name: "Home",
 Komponenten:
  Markdown
 },
 Daten: () => ({
  Inhalt: ''
 }),
 erstellt () {
  dieser.Inhalt = '# Test'
 }
}
</Skript>

Oben sind die Details zur Implementierung des Markdown-Renderings in Vue-Einzelseitenanwendungen aufgeführt. Weitere Informationen zum Markdown-Rendering von Vue finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des SSR-Server-Side-Rendering-Beispiels von Vue
  • Die Vue+elementUI-Komponente implementiert rekursiv eine faltbare, dynamische Rendering-Seitenleistennavigation auf mehreren Ebenen
  • Eine kurze Diskussion über den gesamten Prozess des ersten Renderings von Vue
  • Detaillierte Erläuterung inkompatibler Änderungen an Rendering-Funktionen in Vue3
  • Lösung für das Problem, dass Vue-Binding-Objekte und Array-Variablen nach der Änderung nicht gerendert werden können

<<:  Zusammenfassung mehrerer wichtiger Methoden zur Berechnung und Optimierung des Leistungsindex für MySQL

>>:  Konfigurieren Sie VIM als C++-Entwicklungseditor in Ubuntu

Artikel empfehlen

Detaillierte Erklärung der Routenkonfiguration von Vue-Router

Inhaltsverzeichnis einführen Objektattribute in R...

Erweiterte Docker-Methode zur schnellen Erweiterung

1. Befehlsmethode Führen Sie den Nginx-Dienst im ...

HTML (CSS-Stilspezifikation) muss lauten

CSS-Stilspezifikationen 1. Klassenauswahl 2. Tag-...

CSS-Syntax für Tabellenränder

<br /> CSS-Syntax für Tabellenränder Zu den ...

Übung zum Hochladen von Element-Avataren

Dieser Artikel verwendet die offizielle Element-W...

Fallstudie zum Unterschied zwischen JavaScript parseInt() und Number()

Lernziele: Die beiden Funktionen parseInt() und N...

Implementierung der Docker-Batch-Container-Orchestrierung

Einführung Der Dockerfile-Build-Ausführungsvorgan...

Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux

1. Offizielle Einführung grep ist ein häufig verw...

Mehr als 100 Zeilen Code zur Implementierung von React Drag Hooks

Vorwort Der Quellcode umfasst insgesamt nur mehr ...

So analysieren Sie den SQL-Ausführungsplan in MySQL mit EXPLAIN

Vorwort In MySQL können wir den Befehl EXPLAIN ve...

Hinweise zum Import, Export und zur Migration von MySQL Billions of Data

Ich habe in letzter Zeit viele MySQL-Notizen gema...

Verstehen Sie das elastische CSS3 FlexBox-Layout in 10 Minuten

Grundlegende Einführung Merkmale Flexbox ist ein ...