Vue-CodeMirror 使用

news2024/11/26 19:43:00

vue2

安装

 npm install vue-codemirror -S # or yarn add vue-codemirror -S

全局配置,main.js文件引入

import VueCodemirror from 'vue-codemirror'
// import base style
import 'codemirror/lib/codemirror.css'
Vue.use(VueCodemirror)

Vue 文件内使用
<template>
  <div class="exercise">
    <codemirror 
      v-model="codeSnippets"
	  :options="cmOptions"
    />
  </div>
</template>
<script>
// 编辑器代码格式
import 'codemirror/mode/properties/properties.js'
// 自动刷新(防止codemirror需要手动刷新才出数据)
import 'codemirror/addon/display/autorefresh'
// 主题
import 'codemirror/theme/ayu-mirage.css'

export default {
  data(){
    return{
	  codeSnippets: 'aa',
	  cmOptions: {
	    autorefresh: true,
		tabSize: 4,
		mode: 'text/x-properties',
		theme: 'ayu-mirage',
		line: true,
		viewportMargin: Infinity, //处理高度自适应时搭配使用
		highlightDifferences: true,
		autofocus: false,
		indentUnit: 2,
		smartIndent: true,
		readOnly: true, // 只读
		showCursorWhenSelecting: true,
		firstLineNumber: 1
	  }
	}
  }
}

</script>

<style lang="scss">
.CodeMirror{
  font-family: monospace;
  height: 100vh;
  color: black;
  direction: ltr;
}
</style>

mode 和 theme 可以在官网上查找切换 mode查看官方支持,在项目node_modules/codemirror/mode目录下找相应js文件引入即可; theme同理。

theme 地址:https://codemirror.net/demo/theme.html

mode地址:https://codemirror.net/mode/ codemirror

在 v-for 使用多个时,会出现数据需要鼠标点击一下才会刷新的情况,此时需要引入自动刷新机制,在使用界面引入 autorefresh 并在 options 中配置

// 自动刷新
import 'codemirror/addon/display/autorefresh'

export default {
  data(){
    return{
	  cmOptions: {
	  	// 开启自动刷新
	    autorefresh: true
	  	...

vue3

安装

npm install codemirror-editor-vue3 -S

# or

yarn add codemirror-editor-vue3 -S

全局配置,main.js文件引入
import { createApp } from 'vue';
import App from './App.vue';
import Codemirror from "codemirror-editor-vue3";

const app = createApp(App);
app.use(Codemirror).mount('#app');

Vue 文件内使用
<template>
  <div class="exercise">
    <codemirror v-model:value="codeSnippets" :options="cmOptions" />
  </div>
</template>

<script>
// 编辑器代码格式
import "codemirror/mode/javascript/javascript.js";
// 自动刷新(防止codemirror需要手动刷新才出数据)
import "codemirror/addon/display/autorefresh";
// 主题
import "codemirror/theme/ayu-mirage.css";
import { reactive, ref } from "vue";

export default {
  setup() {
    const codeSnippets = ref(`var i = 0;
for (; i < 9; i++) {
  console.log(i);
  // more statements
}`);
    const cmOptions = reactive({
      autorefresh: true,
      tabSize: 4,
      mode: "text/javascript",
      theme: "ayu-mirage",
      line: true,
      viewportMargin: Infinity, //处理高度自适应时搭配使用
      highlightDifferences: true,
      autofocus: false,
      indentUnit: 2,
      smartIndent: true,
      // readOnly: true, // 只读
      showCursorWhenSelecting: true,
      firstLineNumber: 1,
    });

    return { codeSnippets, cmOptions };
  },
};
</script>

<style lang="scss">
.CodeMirror {
  height: 100vh;
  direction: ltr;
}
</style>

效果如下

merge 模式

<template>
  <div class="exercise">
    <codemirror
      :merge="true"
      @change="onChange"
      class="cm-component"
      :options="cmOptions"
    />
  </div>
</template>

<script>
// 编辑器代码格式
import "codemirror/mode/htmlmixed/htmlmixed.js";
// 自动刷新(防止codemirror需要手动刷新才出数据)
import "codemirror/addon/display/autorefresh";

import { reactive, ref } from "vue";

export default {
  setup() {
    const code = ref(`<head>
  <title>codemirror-editor-vue</title>
  <meta data-n-head="ssr" charset="utf-8">
</head>`);
    const orig2 = ref(`<head>
  <title>test title</title>
  <meta data-n-head="ssr" charset="utf-8">
</head>`);
    const onChange = (val, instance) => {
      console.log(val);
      console.log(instance);
    };
    const cmOptions = reactive({
      autorefresh: true,
      mode: "text/javascript",
      theme: "default",
      value: code.value,
      origLeft: null,
      orig: orig2,
      connect: "align",
      mode: "text/html",
      lineNumbers: true,
      collapseIdentical: false,
      highlightDifferences: true,
    });

    return { onChange, orig2, code, cmOptions };
  },
};
</script>

<style lang="scss">
.CodeMirror-merge {
  font-family: monospace;
  height: 300px;
  color: black;
  direction: ltr;
}
</style>

效果如下

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QDialog的相关API函数

目录 常用的一些 API 函数: QDialog 的子类 QMessageBox&#xff1a; QFileDialog QFont 字体类 QColorDialog QInputDialog QProgressDialog 总结 QDialog是Qt框架中的一个控件类&#xff0c;用于实现对话框的界面。对话框通常用于显示一个独立的窗口&#xff0c;该窗口会显…

手撕spring05(xml解析bean)

概述 通过加载配置文件的信息&#xff0c;注册xml的bean配置 整体设计 知识点补充 返回指定资源的输入流 // 相对路径获取流 java.lang.ClassLoader#getResourceAsStream // 绝对路径获取流 java.io.FileInputStream#FileInputStream(java.io.File) // URL获取流 java.net…

尚医通02:医院API的CRUD+环境搭建

目录 今日必会 项目环境搭建 医院设置模块搭建 配置使用Swagger2 统一返回结果 实现带条件带分页查询接口 新增、修改接口开发 批量删除、锁定医院设置 统一异常处理 今日必会 1.简单的搭建环境。要明白什么时候是pom/war/jar yygh_parent <pom> commo…

开发第一个基于PyQt5的桌面应用

必须使用两个类&#xff1a;QApplication和QWidget。都在PyQt5.QtWidgets。 创建设计了一个小窗口 Qt-Designer的介绍 布局——垂直布局、水平布局、栅格布局、表张布局 空间 垂直、水平空间 按钮相关的控件 普通按钮、工具条按钮、单选按钮、多选按钮、连接命令按钮 列表控…

GD32F4_USB无法识别

Q&#xff1a;GD32F4做USB通讯&#xff0c;在120M\160M时钟主频下能被识别并通讯&#xff0c;在设置主频为200M时无法被识别或通讯异常。 A&#xff1a;注意USB时钟来源&#xff0c;USB工作时钟频率为48M

ETHERNET/IP转PROFIBUS-DP网关Profibus DP转EtherNet/IP协议转换网关

大家好&#xff0c;今天要给大家介绍一款非常神奇的通讯网关捷米特JM-DPM-EIP&#xff01;这款产品可以将各种PROFIBUS-DP从站接入到ETHERNET/IP网络中&#xff0c;真是一款神奇的产品啊&#xff01;你是否想过&#xff0c;如果没有这款产品&#xff0c;PROFIBUS-DP从站和ETHER…

ChatGPT上线GPT-4以来最强应用代码解释器(CodeInterpreter),5分钟教会你熟练使用比肩博士

7月9日消息&#xff0c;OpenAI的语言模型ChatGPT推出了新功能&#xff1a;代码解释器&#xff08;CodeInterpreter&#xff09;。这个新功能已经对所有Plus订阅用户开放&#xff0c;代码解释器扩展了ChatGPT的功能&#xff0c;为用户带来了更好的交互式编程体验和强大的数据可视…

mac批量在文件名前面加相同文字?

mac批量在文件名前面加相同文字&#xff1f;你平时在使用电脑进行工作或者学习的时候&#xff0c;是不是需要做一些关于文件整理和保存的操作呢&#xff0c;并且还需要对一大堆的文件进行重名呢&#xff1f;相信很大多数小伙伴都要面对这些&#xff0c;经常需要将大量文件的名称…

学习分布式锁原理的一些个人思考

首先分布式锁和我们平常讲到的锁原理基本一样&#xff0c;目的就是确保&#xff0c;在多个线程并发时&#xff0c;只有一个线程在同一刻操作这个业务或者说方法、变量。 在一个进程中&#xff0c;也就是一个jvm 或者说应用中&#xff0c;我们很容易去处理控制&#xff0c;在jd…

微软MFC技术中的消息队列及消息处理(上)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来聊聊微软MFC技术中的消息队列及消息处理。 MFC应用程序中由Windows 系统以消息的形式发送给应用程序的窗口。窗口接收和处理消息之后&#xff0c;把控制返回给Windows。Windows系统在同一时间可显示多…

Scratch 随机平台发球

Scratch 随机平台发球 本程序整合了之前发布的“随机平台跳跃”和“棒球发球与反弹”程序的功能。球被设为跟随角色以确保发球位置正常&#xff0c;增加的功能主要是球在碰到平台时可以结合上一个坐标判断接触到平台上方还是下方并向相应方向旋转90度以更好地模拟反弹效果&…

多元时间序列 | Matlab基于高斯过程回归GPR多维时间序列预测,GPR多变量时间序列预测(Matlab完整程序)

目录 多元时间序列 | RBF径向基神经网络多变量时间序列预测(Matlab完整程序)预测结果基本介绍程序设计参考资料多元时间序列 | RBF径向基神经网络多变量时间序列预测(Matlab完整程序) 预测结果 基本介绍 多元时间序列 | Matlab基于高斯过程回归GPR多维时间序列预测,

大量的闲置校园网/校园WiFi服务器

开学的时候服务器不够用&#xff0c;放假的时候服务器闲置下来&#xff0c;是不是还是得发展免流&#xff0c;只有免流才不分白天黑夜上学下学或者放假开学&#xff0c; 目前免流也就只能玩玩停机卡免流&#xff0c;定向流量转通用流量&#xff0c;除了停机卡比较稳定&#xf…

【CANoe+vTESTstudio】

vTESTstudio(TSO)是测试实施的专用工具。它是一种将传统的Test Automation Editor&#xff08;TAE&#xff09;那样的将用户界面、CAPL和C#等程序语言的实施环境集成在一起的工具。 vTESTstudio画面 vTESTstudio和CANoe 可以使用与CANoe通用的数据库&#xff0c;各文件类也可…

什么是分布式?——分布式的基本概念

目录 1、微服务 2、集群&分布式&节点 3、远程调用 4、负载均衡 5、服务注册/发现&注册中心 6、配置中心 7、服务熔断&服务降级 8、API 网关 1、微服务 微服务架构风格&#xff0c;就像是把一个 单独的应用程序 开发为 一套小服务 &#xff0c;每个 小…

基于springboot+Redis的前后端分离项目(七)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 发布笔记&#xff0c;点赞&#xff0c;点赞排行 达人探店1、达人探店-发布探店笔记2、 达人探店-查看探店笔记3、 达人探店-点赞功…

dvwa靶场通关(八)

第八关&#xff1a;SQL Injection (Blind) low 这一关是盲注&#xff0c; 所以不能用联合查询了&#xff0c;只能靠一点一点手动盲猜了 这里用到length和substr函数 先猜数据库名长度 1 and length(database())1# 用bp抓包&#xff0c;发送到爆破 选择攻击位置 库名长度应该…

ModaHub魔搭社区:向量数据库Zilliz Cloud向量搜索和查询教程(二)

目录 批量搜索 基于条件搜索 查询 批量搜索 Zilliz Cloud 支持在单个请求中同时指定多个查询向量来进行批量搜索。大多数情况下,批量搜索比单向量搜索效率更高,因为批量搜索的总延时会比逐一执行单向量搜索的累计延时要低。 您可以迭代数据集中的行,并以行为单位发送…

【UGUI学习笔记】Canvas

文章目录 组件介绍CanvasRender ModeOverlayCameraWorld Space Canvas ScalerReference Pixels Per UnitUI Scale ModeGraphic RaycasterBlocking Object Canvas Grope UGUI2.0官方文档 一些基础对应控件的Attribute的含义&#xff1a; Canvas相当于Android的Panel&#xff0c;…

二十二、数据运算

目录 一、算术运算 二、比较运算 三、汇总运算 1、count非空值计数 2、sum求和 3、mean求均值 4、max求最大值 5、min求最小值 6、median求中位数 7、mode求众数 8、var求方差 9、std求标准差 10、quantile求分位数 四、相关性运算 一、算术运算 算术运算就是基本…