Vue codemirrorはオンラインコードコンパイラの効果を実現します

Vue codemirrorはオンラインコードコンパイラの効果を実現します

序文

Web 上でオンライン コード コンパイルの効果を実現したい場合は、 CodeMirrorを再度カプセル化するコンポーネントvue-codemirrorを使用する必要があります。

  • コードの強調表示をサポート
  • モノカイなど62種類のテーマカラー
  • json、sql、javascript、css、xml、html、yaml、markdown、python 編集モードをサポートし、デフォルトは json です。
  • クイック検索をサポート
  • 自動補完プロンプトをサポート
  • 自動マッチング括弧をサポート

環境の準備

npm インストール jshint
npm インストール jsonlint
npm スクリプトローダーをインストールします
npm で vue-codemirror をインストールします

パッケージコンポーネント

プロジェクトのcomponentsvue-codemirror再度カプセル化することができます。

<テンプレート>
  <コードミラー
    ref="myCm"
    v-model="エディター値"
    :options="cmオプション"
    @changes="onCmCodeChanges"
    @blur="onCmBlur"
    @keydown.native="onKeyDown"
    @mousedown.native="onMouseDown"
    @paste.native="貼り付け時"
  >
  </codemirror>
</テンプレート>

<スクリプト>
「vue-codemirror」から { codemirror } をインポートします。
'codemirror/keymap/sublime' をインポートします
「codemirror/mode/javascript/javascript.js」をインポートします。
「codemirror/mode/xml/xml.js」をインポートします。
「codemirror/mode/htmlmixed/htmlmixed.js」をインポートします。
「codemirror/mode/css/css.js」をインポートします。
「codemirror/mode/yaml/yaml.js」をインポートします。
「codemirror/mode/sql/sql.js」をインポートします。
「codemirror/mode/python/python.js」をインポートします。
「codemirror/mode/markdown/markdown.js」をインポートします。
「codemirror/addon/hint/show-hint.css」をインポートします。
「codemirror/addon/hint/show-hint.js」をインポートします。
「codemirror/addon/hint/javascript-hint.js」をインポートします。
「codemirror/addon/hint/xml-hint.js」をインポートします。
「codemirror/addon/hint/css-hint.js」をインポートします。
「codemirror/addon/hint/html-hint.js」をインポートします。
「codemirror/addon/hint/sql-hint.js」をインポートします。
「codemirror/addon/hint/anyword-hint.js」をインポートします。
「codemirror/addon/lint/lint.css」をインポートします。
「codemirror/addon/lint/lint.js」をインポートします。
「codemirror/addon/lint/json-lint」をインポートします。
'codemirror/addon/selection/active-line' をインポートします。
「codemirror/addon/hint/show-hint.js」をインポートします。
「codemirror/addon/hint/anyword-hint.js」をインポートします。
スクリプトローダーのjsonlintが必要です。
「codemirror/addon/lint/javascript-lint.js」をインポートします。
「codemirror/addon/fold/foldcode.js」をインポートします。
「codemirror/addon/fold/foldgutter.js」をインポートします。
「codemirror/addon/fold/foldgutter.css」をインポートします。
「codemirror/addon/fold/brace-fold.js」をインポートします。
「codemirror/addon/fold/xml-fold.js」をインポートします。
「codemirror/addon/fold/comment-fold.js」をインポートします。
「codemirror/addon/fold/markdown-fold.js」をインポートします。
「codemirror/addon/fold/indent-fold.js」をインポートします。
「codemirror/addon/edit/closebrackets.js」をインポートします。
「codemirror/addon/edit/closetag.js」をインポートします。
「codemirror/addon/edit/matchtags.js」をインポートします。
「codemirror/addon/edit/matchbrackets.js」をインポートします。
「codemirror/addon/selection/active-line.js」をインポートします。
「codemirror/addon/search/jump-to-line.js」をインポートします。
「codemirror/addon/dialog/dialog.js」をインポートします。
「codemirror/addon/dialog/dialog.css」をインポートします。
「codemirror/addon/search/searchcursor.js」をインポートします。
「codemirror/addon/search/search.js」をインポートします。
「codemirror/addon/display/autorefresh.js」をインポートします。
「codemirror/addon/selection/mark-selection.js」をインポートします。
「codemirror/addon/search/match-highlighter.js」をインポートします。
エクスポートデフォルト{
  名前: "インデックス",
  コンポーネント: {codemirror},
  プロパティ: ["cmTheme", "cmMode", "cmIndentUnit", "autoFormatJson"],
  データ() {
    戻る {
      エディター値: '{}',
      オプション: {
        : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
          「CodeMirror-lint-markers」、
          「CodeMirror-行番号」、
          「CodeMirror-foldgutter」
        ]、
        ハイライト選択一致: {
          最小文字数: 2,
          スタイル: "matchhighlight",
          表示トークン: true
        },
      },
      enableAutoFormatJson: this.autoFormatJson == null ? true : this.autoFormatJson, // json 編集モードで、入力ボックスがフォーカスを失ったときに自動的にフォーマットするかどうか。有効にする場合は true、無効にする場合は false です}
  },
  作成された() {
    試す {
      if (!this.editorValue) {
        this.cmOptions.lint = false;
        戻る;
      }
      this.cmOptions.mode が "application/json" の場合 {
        AutoFormatJsonを有効にする場合
          戻る;
        }
        this.editorValue = this.formatStrInJson(this.editorValue);
      }
    } キャッチ (e) {
      console.log("codemirror の初期化中にエラーが発生しました: " + e);
    }
  },
  メソッド: {
    リセットリント() {
      (!this.$refs.myCm.codemirror.getValue())の場合{
        this.$nextTick(() => {
          this.$refs.myCm.codemirror.setOption("lint", false);
        });
        戻る;
      }
      this.$refs.myCm.codemirror.setOption("lint", false);
      this.$nextTick(() => {
        this.$refs.myCm.codemirror.setOption("lint", true);
      });
    },
    //文字列をJSON形式の文字列としてフォーマットする formatStrInJson(strValue) {
      JSON.stringify() を返す
        JSON.parse(strValue)、
        ヌル、
        this.cmインデント単位
      );
    },
    onCmCodeChanges(cm, 変更) {
      this.editorValue = cm.getValue();
      この関数は、Lint をリセットします。
    },
    // フォーカスを失ったときの処理関数 onCmBlur(cm, event) {
      試す {
        editorValue を cm.getValue() にします。
        if (this.cmOptions.mode === "application/json" && editorValue) {
          AutoFormatJsonを有効にする場合
            戻る;
          }
          エディター値 = this.formatStrInJson(エディター値);
        }
      } キャッチ (e) {
        // 何もしない}
    },
    //キーボードイベント処理関数 onKeyDown(event) {
      const keyCode = event.keyCode || event.which || event.charCode;
      定数キーの組み合わせ =
          イベント.ctrlキー || イベント.altキー || イベント.metaキー;
      if (!キーの組み合わせ && キーコード > 64 && キーコード < 123) {
        this.$refs.myCm.codemirror.showHint({ completeSingle: false });
      }
    },
    //マウスが押されたときのイベント処理関数 onMouseDown(event) {
      this.$refs.myCm.codemirror.closeHint();
    },
    // 貼り付けイベント処理関数 OnPaste(event) {
      this.cmOptions.mode が "application/json" の場合 {
        試す {
          this.editorValue = this.formatStrInJson(this.editorValue);
        } キャッチ (e) {
          // 何もしない}
      }
    },
  }
}
</スクリプト>

<スタイルスコープ>

</スタイル>

このコンポーネントは、デフォルトでjsonコンパイラで構成されています。cmOptions cmOptionsは、コードコンパイラの設定項目が含まれています。追加の機能が必要な場合は、公式ドキュメントの設定も参照してください。次に、表示効果を確認します。

文字列を json 形式で入力したことがわかります。形式が正しくない場合でも、エラー メッセージが表示され、自動的にフォーマットされます。

Python コンパイラ

カプセル化するコンポーネントは、デフォルトでは JSON コンパイラです。他の言語を使用する場合も非常に簡単です。他の言語のモードをインポートするだけです。

<テンプレート>
  <div>
    <el-button type="primary" icon="el-icon-circle-check-outline" @click="handleConfirm" round>
      保存をクリックします</el-button>
    <el-button icon="el-icon-caret-right" type="info" @click="handleRunCode" round>
      オンラインで実行</el-button>
  <コードエディタ
    :cmTheme="cmテーマ"
    :cmMode="cmMode"
  >
  </コードエディター>
  </div>
</テンプレート>

<スクリプト>
'@/components/CodeEditor/index' から codeEditor をインポートします。
import 'codemirror/theme/monokai.css' // monokaiテーマをインポート import 'codemirror/mode/python/python.js' // pythonをインポート
エクスポートデフォルト{
  名前: "インデックス",
  コンポーネント:
    コードエディター
  },
  データ() {
    戻る {
      cmテーマ:「モノカイ」
      cmモード: "python",
    }
  },
  メソッド: {
    ハンドル確認() {},
    ハンドル実行コード() {}
  }
}
</スクリプト>

<スタイル>
.コードミラー {
  位置: 相対的;
  高さ:100vh;
  オーバーフロー: 非表示;
  上マージン: 10px;
}
</スタイル>
<style lang="scss" スコープ>
</スタイル>

効果は以下のとおりです

これで、vue codemirror のオンライン コード コンパイラの実装に関するこの記事は終了です。vue codemirror オンライン コード コンパイラに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue は、codemirror コード エディターに SQL コード フォーマット機能を実装しました。
  • codemirrorプラグインを使用して、vueプロジェクトにコードエディタ機能を実装します。
  • Vue で codemirror を使用する 2 つの方法
  • Vue で codemirror を使用する際に発生する問題
  • Vue で codemirror を使用する詳細な例
  • Vue Demiを使用して、Vue2とVue3の両方と互換性のあるコンポーネントライブラリを構築します。

<<:  Docker-compose インストール yml ファイルの設定方法

>>:  MySQLは外部SQLスクリプトファイルのコマンドを実行します

推薦する

MySQLの保存場所を新しいディスクに移行する方法

1. 新しいディスクを準備し、現在のルートパーティションと同じファイルシステムでフォーマットし、ディ...

SQL実行ステップの詳細な分析

SQL実行ステップの詳細な分析まず、ステートメントが実行される順序を見てみましょう。 (8)選択する...

Dockerカスタムネットワーク実装

目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...

MySQLステートメントの記述と実行順序を理解するだけです

MySQL ステートメントの書き込み順序と実行順序には大きな違いがあります。書き順、mysql の一...

Windows 10 での Tomcat のインストールと展開に関する詳細なチュートリアル

目次1 Java環境の設定2 tomcatのインストールと展開Tomcat をインストールして展開す...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...

ブラウザでのjsのイベントループイベントキューの詳細な説明

目次序文スタックと2つのキューを理解する実行プロセス簡単な例より難しい例要約する序文以下の内容はブラ...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

Vue3 の ref と toRef の違いを簡単に分析します

1. refがコピーされ、ビューが更新されますrefを使用してオブジェクトのプロパティ値をレスポンシ...

Centos7.3 Nginx をインストールして展開し、https を設定する方法

設置環境1. gccのインストールnginxをインストールするには、まず公式サイトからダウンロードし...

mysql MDLメタデータロックの詳細な分析

序文: MySQL で SQL 文を実行すると、予想した時間内に文が完了しません。このような場合、通...

大きな太陽の天気アイコンを純粋な CSS で記述する方法の例

効果効果図は以下のとおりです実装のアイデアDivは太陽の長方形の光と影を実現します前の疑似要素は、既...

CSS ファンタスティックボーダーアニメーション効果の実装

今日、私はブログサイト shoptalkshow を閲覧していて、非常に興味深いこのインターフェース...

ボタンに醜い灰色の枠線が付いています。これを削除するにはどうすればよいですか?

ダイアログをクロージャで使用し、右上隅の向こう側に閉じるボタンがあるダイアログを描画しました。ボタン...

入力のid属性とname属性の違いの例

長い間ウェブサイトを作ってきましたが、入力時のnameとidの違いがまだわかりません。最近jQuer...