vue codemirror vue-codemirror

yarn add vue-codemirror

yarn add codemirror 
<template>
  <q-card>
    <q-tabs
      v-model="activeTab"
      dense
      class="text-grey"
      active-color="primary"
      indicator-color="primary"
      align="left"
    >
      <q-tab name="template" label="html" />
      <q-tab name="js" label="js" />
      <q-tab name="css" label="css" />
    </q-tabs>

    <q-separator />
    <q-tab-panels v-model="activeTab">
      <q-tab-panel name="template">
        <codemirror
          :value="msg"
          v-model="msg"
          :options="options"
          @changes="changes"
          codemirrorIgnore="true"
        />
      </q-tab-panel>
    </q-tab-panels>
  </q-card>
</template>
<script>
import { codemirror } from 'vue-codemirror';
import 'codemirror/lib/codemirror.css';

import 'codemirror/mode/javascript/javascript.js';
import 'codemirror/mode/css/css.js';
import 'codemirror/mode/vue/vue.js';
import 'codemirror/theme/monokai.css';

// styleSelectedText
import 'codemirror/addon/selection/mark-selection.js';
// hint
import 'codemirror/addon/hint/show-hint.js';
import 'codemirror/addon/hint/show-hint.css';
import 'codemirror/addon/hint/javascript-hint.js';
import 'codemirror/addon/selection/active-line.js';
// highlightSelectionMatches
import 'codemirror/addon/scroll/annotatescrollbar.js';
import 'codemirror/addon/search/matchesonscrollbar.js';
import 'codemirror/addon/search/match-highlighter.js';
// keyMap
import 'codemirror/mode/clike/clike.js';
import 'codemirror/addon/edit/matchbrackets.js';
import 'codemirror/addon/comment/comment.js';
import 'codemirror/addon/dialog/dialog.js';
import 'codemirror/addon/dialog/dialog.css';
import 'codemirror/addon/search/searchcursor.js';
import 'codemirror/addon/search/search.js';
import 'codemirror/keymap/sublime.js';
// foldGutter
import 'codemirror/addon/fold/foldgutter.css';
import 'codemirror/addon/fold/brace-fold.js';
import 'codemirror/addon/fold/comment-fold.js';
import 'codemirror/addon/fold/foldcode.js';
import 'codemirror/addon/fold/foldgutter.js';
import 'codemirror/addon/fold/indent-fold.js';
import 'codemirror/addon/fold/markdown-fold.js';
import 'codemirror/addon/fold/xml-fold.js';

export default {
  components: { codemirror },
  props: [
  ],
  data() {
    return {
      msg: '',
      activeTab: 'template',
      options: {
        value: '',
        theme: 'monokai',
        tabSize: 2,
        lineNumbers: true,
        line: true,
        readOnly: false,
        mode: 'text/x-vue',
      },
    };
  },
  methods: {
    changes() {
    },
    onMouseDown() {
    },
    onKeyDown() {
    },
    onCmBlur() {
    },
  },
  created() {
    window.addEventListener('touchmove', () => { }, { passive: false });
  },
  mounted() {
    this.msg = `<div class="col row">
    <div class="drawing-item col-6">
        <div class="dynamic-form-item">
            <div v-show="true" class=dynamic-form-item-label style=width:100%;>
                <q-icon name="star" color="red" v-show=true />
                单行文本
            </div>
            <q-input outlined dense v-model="formData.field101" type="text" placeholder="请输入单行文本" clearable></q-input>
        </div>
    </div>
    <div class="drawing-item col-6">
        <div class="dynamic-form-item">
            <div v-show="true" class=dynamic-form-item-label style=width:100%;>
                <q-icon name="star" color="red" v-show=true />
                单行文本
            </div>
            <q-input outlined dense v-model="formData.field110" type="text" placeholder="请输入单行文本" clearable></q-input>
        </div>
    </div>
    <div class="drawing-item col-12">
        <div class="dynamic-form-item">
            <div v-show="true" class=dynamic-form-item-label style=width:100%;>
                <q-icon name="star" color="red" v-show=true />
                多行文本
            </div>
            <q-input outlined dense v-model="formData.field111" type="textarea" placeholder="请输入多行文本" clearable></q-input>
        </div>
    </div>
</div>`;
  },
};
</script>

<style lang="stylus">
.CodeMirror
  border 1px solid #eee
  height auto
</style>

在quasar中 配合q-dialog使用的时候如果出现 行编号挡住了代码,那么请给dialog添加  transition-show 属性  这个 transition-show 属性很不起眼,但是非常重要。

<template>
  <q-dialog v-model="codeDrawer" persistent :maximized="true" transition-show>
    <q-form class="dialog_tool column">
      <h5 class="view_title justify-between q-px-md">
        页面预览
        <q-btn dense outline round icon="clear" size="sm" v-close-popup />
      </h5>
      <div class="col row">
        <div class="col column" v-if="showCode">
          <q-separator />
          <q-scroll-area class="col">
            <code-editor :previewData="previewData" />
          </q-scroll-area>
        </div>
        <div class="col column bg-white">
          <div class="q-mb-sm bg-light-blue-1">
            <q-toggle label="显示代码" v-model="showCode" />
          </div>
          <code-runner :previewData="previewData" />
        </div>
      </div>
    </q-form>
  </q-dialog>
</template>
<script>
import codeRunner from './coderunner';
import codeEditor from './codeeditor';

export default {
  components: { codeRunner, codeEditor },
  data() {
    return {
      activeTab: 'template',
      showCode: true,
      codeDrawer: false,
      showPreview: false,
      previewData: '',
    };
  },
  computed: {
  },
  watch: {},
  created() {
  },
  mounted() {
    window.addEventListener('keydown', this.preventDefaultSave);
  },
  methods: {
    preventDefaultSave(e) {
      if (e.key === 's' && (e.metaKey || e.ctrlKey)) {
        e.preventDefault();
      }
    },
    show(previewData) {
      this.previewData = previewData;
      this.codeDrawer = true;
    },
    close() {
      this.codeDrawer = false;
    },
  },
};
</script>

CodeMirror是一个用于在网页中创建和编辑代码的JavaScript库。它提供了丰富的功能和灵活的配置选项,可以适用于各种编程语言。CodeMirror的官方文档可以在中找到。在参考文档中,可以找到有关如何配置CodeMirror编辑器的信息。 在Vue 3中使用CodeMirror编辑器,可以通过安装codemirror-editor-vue3包来实现。该包是一个Vue 3的封装组件,可以方便地在Vue项目中使用CodeMirror编辑器。你可以在中找到该项目的详细信息和使用说明。 使用codemirror-editor-vue3的步骤如下: 1. 在Vue项目中安装codemirror-editor-vue3包。 2. 在需要使用CodeMirror编辑器的组件中引入codemirror-editor-vue3组件。 3. 在该组件的模板中使用codemirror-editor-vue3组件,并设置相应的props和事件处理函数。 4. 在组件的script部分,可以通过import语句引入需要使用的编程语言的js文件,例如如果需要使用Python语言,可以引入"codemirror/mode/python/python.js"。 5. 在CodeMirror编辑器的配置选项中,设置mode为相应的编程语言模式,例如对于Python语言,可以设置mode为"text/x-python"。 6. 根据项目需要,可以设置其他的CodeMirror编辑器配置选项,如主题、自动补全等。 请注意,使用codemirror-editor-vue3之前,确保已经安装了Vue 3和CodeMirror库,并按照官方文档进行了配置和使用。 参考资料: CodeMirror官方文档:https://codemirror.net/5/mode/index.html codemirror-editor-vue3项目信息和使用说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值