Vue シングルページ アプリケーションで Markdown レンダリングを実装する

Vue シングルページ アプリケーションで Markdown レンダリングを実装する

以前、Markdown をレンダリングするときに、mavonEditor のプレビュー モードを使用していましたが、これは非常に便利でした。コンポーネントをインポートするだけで済みましたが、最近の開発では困難に直面しました。

主な問題は、シングルページ アプリケーションであるため、サイト内のリンクを router-link を使用してリダイレクトする必要があることです。mavonEditor によってレンダリングされる a タグがデフォルトで使用されると、ページが再読み込みされ、ユーザー エクスペリエンスが低下します。

ダイナミックレンダリング

フロントエンドでユーザーコンテンツに基づいて router-link を動的にレンダリングする場合は、ダイナミックレンダリングを使用する必要があります。公式ドキュメントによると、vue.config.js を直接変更できます。

// vue.config.js
モジュール.エクスポート = {
 ランタイムコンパイラ: true
}

Markdownのレンダリング

著者は markdown-it を使用しており、設定プロセスは次のとおりです。

インストール

npm install markdown-it --save # Markdown-it 本体 npm install markdown-it-highlightjs --save # コードのハイライト npm install markdown-it-katex --save # Latex サポート

ここでは 2 つの追加の構文プラグインがインストールされています。他のプラグインが必要な場合は、npm で検索できます。

静的ファイルのインポート

ハイライト
CDN 経由でインポートし、index.html に追加します。

<link rel="スタイルシート" href="//cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/styles/default.min.css" rel="外部 nofollow" >
<script src="//cdn.jsdelivr.net/gh/highlightjs/[email protected]/build/highlight.min.js"></script>

github-マークダウン-css

マークダウンスタイル

インストール

npm で github-markdown-css をインストール --save

輸入

main.jsファイルに追加

'github-markdown-css/github-markdown.css' をインポートします。

カテックス

CDN 経由でインポートし、 index.htmlに追加します。

<link rel="スタイルシート" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css" rel="外部 nofollow" >

使用

まず、 componentsディレクトリにMarkdown.vueファイルを作成します。

<テンプレート>
 <components :is="html" class="markdown-body"></components>
</テンプレート>

<スクリプト>
'markdown-it' から MarkdownIt をインポートします
'markdown-it-highlightjs' から hljs をインポートします。
'markdown-it-katex' から LaTeX をインポートします
エクスポートデフォルト{
 名前: 'マークダウン'、
 小道具: {
  内容: 文字列
 },
 データ: () => ({
  : ヌル
 })、
 計算: {
  // 動的バインディング中にHTMLを動的に更新するにはcomputedを使用します: function () {
   res = this.md.render(this.content) とします。
   // 正規表現を使用して、サイト内リンクを router-link タグに置き換えます res = res.replace(/<a href="(?!http:\/\/|https:\/\/)(.*?)" rel="external nofollow" >(.*?)<\/a>/g, '<router-link to="$1">$2</router-link>')
   // 正規表現を使用して外部リンクを新しいウィンドウで開きます res = res.replace(/<a href="(.*?)" rel="external nofollow" >(.*?)<\/a>/g, '<a href="$1" rel="external nofollow" target="_blank">$2</a>')
   戻る {
    テンプレート: '<div>' + res + '</div>'
   }
  }
 },
 作成された(){
  this.md = 新しい MarkdownIt()
  this.md.use(hljs).use(ラテックス)
 }
}
</スクリプト>

使いたい場所にインポートします

<テンプレート>
  <div>
    <マークダウン:content="content"/>
  </div>
</テンプレート>

<スクリプト>
'@/components/Markdown.vue' から Markdown をインポートします。
エクスポートデフォルト{
 名前: 'ホーム'、
 コンポーネント:
  マークダウン
 },
 データ: () => ({
  コンテンツ: ''
 })、
 作成された(){
  this.content = '# テスト'
 }
}
</スクリプト>

上記は、Vue シングルページ アプリケーションで Markdown レンダリングを実装する詳細です。Vue Markdown レンダリングの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • VueのSSRサーバーサイドレンダリング例の詳細な説明
  • Vue+elementUI コンポーネントは、折りたたみ可能な動的レンダリングのマルチレベル サイドバー ナビゲーションを再帰的に実装します。
  • Vueの最初のレンダリングのプロセス全体についての簡単な説明
  • Vue3 のレンダリング関数における互換性のない変更の詳細な説明
  • Vueバインディングオブジェクトと配列変数を変更した後にレンダリングできない問題の解決策

<<:  MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

>>:  Ubuntu で VIM を C++ 開発エディタとして設定する

推薦する

IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

理由は、すべてのファイルが utf8 でエンコードされているためです。ファイルがインクルードされると...

Truncate Table の使用法の説明

テーブルを切り捨てる個々の行の削除をログに記録せずに、テーブル内のすべての行を削除します。文法 テー...

Linux sftp コマンドの使用法の概要

sftp は、安全なファイル転送プロトコルである Secure File Transfer Prot...

Mac 環境での Nginx 構成とローカル静的リソースへのアクセスの実装

ローカル開発では、直接アクセスできない静的ファイル リソースのデバッグが必要になる場合があります。こ...

MySQL/MariaDB でピボット テーブルを実装する方法のサンプル コード

前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...

古典的なスネークゲームの JavaScript 実装

この記事では、古典的なスネークゲームを実装するためのJavaScriptの具体的なコードを参考までに...

Centos7 ベースの Varnish キャッシュ プロキシ サーバーを展開する

1. ワニスの概要1. ワニスの紹介Varnish は、新しいソフトウェア アーキテクチャを使用し、...

Ubuntu 基本チュートリアル: apt-get コマンド

序文apt-get コマンドは、Ubuntu システムのパッケージ管理ツールです。パッケージのインス...

CSS3 カスタムスクロールバースタイル::webkit-scrollbar サンプルコード詳細説明

Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...

redhat7 に yum 経由で mysql5.7.17 をインストールするチュートリアル

RHEL/CentOS シリーズの Linux オペレーティング システムには MySQL ソース自...

Vue3 コンパイルプロセス - ソースコード分析

序文: Vue3 がリリースされてからかなり経ちますが、最近、会社のプロジェクトでVue3 + Ty...

Linux サーバーと Windows システム間でファイルをアップロードおよびダウンロードする方法

背景: Linux サーバーのファイルのアップロードとダウンロード。 XShell+Xftp インス...

Docker イメージのローカル Elasticsearch ポート操作へのアクセス

dockerスタックによってデプロイされたイメージサービスを使用すると、イメージを入力した後、理論的...

Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。...

ラベルとボタンを削除し、背景画像の点線/影を追加すると完璧な解決策になります

ユーザーが登録すると、ラベルをクリックして確認コードを変更します。クリックするとラベルに影の部分がで...