【vue3页面展示代码】展示代码codemirror插件

news2024/10/1 3:31:28

技术版本
vue 3.2.40、codemirror 6.0.1、less 4.1.3、vue-codemirror 6.1.1、
@codemirror/lang-vue 0.1.2、@codemirror/theme-one-dark 6.1.2

效果图

在这里插入图片描述

1.安装插件

yarn add codemirror vue-codemirror @codemirror/lang-vue @codemirror/theme-one-dark

2.新建子组件CodeMirror(src/view-components/CodeMirror/index.vue)

<script setup lang="ts">
  import type { CSSProperties } from 'vue';
  import { ref } from 'vue';
  import { Codemirror } from 'vue-codemirror';
  import { vue } from '@codemirror/lang-vue';
  import { oneDark } from '@codemirror/theme-one-dark';

  interface Props {
    codeStyle?: CSSProperties; // 代码样式
    dark?: boolean; // 是否暗黑主题
    code?: string; // 代码字符串
    // placeholder?: string // 占位文本
    // autofocus?: boolean // 自动聚焦
    // disabled?: boolean // 禁用输入行为和更改状态
    // indentWithTab?: boolean // 启用tab按键
    // tabSize?: number // tab按键缩进空格数
  }
  const props = withDefaults(defineProps<Props>(), {
    // placeholder: 'Code goes here...',
    codeStyle: () => {
      return {};
    },
    dark: false,
    code: '',
    // autofocus: false,
    // disabled: false,
    // indentWithTab: true,
    // tabSize: 2
  });
  const extensions = props.dark ? [vue(), oneDark] : [vue()];
  const codeValue = ref(props.code);
  const emits = defineEmits([
    'update:code',
    'ready',
    'change',
    'focus',
    'blur',
  ]);
  function handleReady(payload: any) {
    // console.log('ready')
    emits('ready', payload);
  }
  function onChange(value: string, viewUpdate: any) {
    emits('change', value, viewUpdate);
    emits('update:code', value);
  }
  function onFocus(viewUpdate: any) {
    emits('focus', viewUpdate);
  }
  function onBlur(viewUpdate: any) {
    emits('blur', viewUpdate);
  }
</script>

<template>
  <div>
    <Codemirror
      v-model="codeValue"
      :style="codeStyle"
      :extensions="extensions"
      v-bind="$attrs"
      @ready="handleReady"
      @change="onChange"
      @focus="onFocus"
      @blur="onBlur"
    />
  </div>
</template>

<style lang="less" scoped>
  /deep/ .cm-editor {
    border-radius: 8px;
    outline: none;
    border: 1px solid transparent;
    .cm-scroller {
      border-radius: 8px;
    }
  }
  /deep/ .cm-focused {
    border: 1px solid fade(#000, 48%);
  }
</style>

3.父组件调用CodeMirror组件

<template>
    <div class="addHttpMqttServicePage">
        <CodeMirror
              v-model:code="form.script"
              dark
              :codeStyle="{ width: '1000px', height: '190px', fontSize: '16px' }"
              :disabled="false"
              @ready="onReady"
              @change="onChange"
              @focus="onFocus"
              @blur="onBlur"
            />
    </div>
  </template>
  
  <script setup lang="ts">
    import { ref, defineProps } from 'vue';
    import CodeMirror from '@/view-components/CodeMirror/index.vue';
    
    const form = ref({
      script: '',
    });
  
    const onReady = (payload: any) => {
      console.log('ready:', payload);
    };
    const onChange = (value: string, viewUpdate: any) => {
      console.log('change:', value);
      console.log('change:', viewUpdate);
    };
    const onFocus = (viewUpdate: any) => {
      console.log('focus:', viewUpdate);
    };
    const onBlur = (viewUpdate: any) => {
      console.log('blur:', viewUpdate);
    };
  </script>
  
  <style scoped lang="less">
    .addHttpMqttServicePage {
      width: 100%;
      height: 100%;
      padding: 20px;
      &-header {
        font-size: 18px;
        font-weight: bold;
      }
      &-body {
        padding-top: 24px;
        width: 50%;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;

      }
    }

  </style>
  

4.注意点

1.官方文档:https://codemirror.net/
2.disabled为true时,则只允许可读不能修改

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

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

相关文章

ChatGpt介绍和国产ChatGpt对比

1.ChatGPT是美国OpenAI研发的聊天机器人程序&#xff0c;2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言来进行对话。 2.ChatGPT是一种基于自然语言处理的聊天机器人程序。它使用深度学习技术&#xff0c;通过对…

A+CLUB管理人支持计划第八期 | 量创投资

免责声明 本文内容仅对合格投资者开放&#xff01; 私募基金的合格投资者是指具备相应风险识别能力和风险承担能力&#xff0c;投资于单只私募基金的金额不低于100 万元且符合下列相关标准的单位和个人&#xff1a; &#xff08;一&#xff09;净资产不低于1000 万元的单位&…

抖 X-Bongus 参数逆向 python案例实战

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 知识点&#xff1a; 动态数据抓包 requests发送请求 X-Bogus 参数逆向 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests pip ins…

python从入门到精通(一)

自己也有三四年的码龄了&#xff0c;目前&#xff0c;重拾起自己的博客&#xff0c;记录自己的学习笔记&#xff0c;为大家提供优质内容&#xff0c;也来巩固自己的学习内容。 很开心也成功成为了一名研究生&#xff0c;张张的研究方向是图像处理和计算机视觉这一块&#xff0c…

k8s手动下载镜像、通过容器创建镜像方法

手动下载镜像 1、首先pull镜像到本地 docker pull <镜像名称>:<标签>2、转储镜像 docker save -o /path/to/save/image.tar 3、解压 tar -xvf /path/to/save/image.tar补充 1、如果要将tar还原成镜像 docker load -i /path/to/save/image.tar或者用输入重定向…

Win10专业版开启远程桌面

Win10专业版开启远程桌面 方法一&#xff1a; 一、按“Win R”键&#xff0c;然后输入“sysdm.cpl”并按下回车键打开系统属性。 二、选择“远程”选项卡&#xff0c;在远程桌面中勾选“允许远程连接到此计算机”就可以开启远程桌面&#xff1b; 方法二&#xff1a; 一、打…

融云受邀参加 Web3.0 顶级峰会「Meta Era Summit 2023」

本周四 19:00-20:00&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击上方小程序报名~ 9 月 12 日&#xff0c;由中国香港 Web3.0 媒体 Meta Era 主办的“Meta Era Summit 2023”在新加坡收官&#xff0c;融云作为战略合作…

Window11专业版安装Java环境

目录 一、首先准备好一个Java的环境包 二、在Windows11上双击运行此环境包 三、根据提示安装完成后&#xff0c;在此电脑上属性中搜索环境变量 四、配置环境变量、并验证 一、首先准备好一个Java的环境包 二、在Windows11上双击运行此环境包 按着要求进行下一步操作&#…

数据丢失防护工具

什么是数据丢失防护 数据丢失防护 &#xff08;DLP&#xff09; 涉及系统地识别、定位和评估具有内容和上下文感知的数据和用户活动&#xff0c;以应用策略或主动响应来防止数据丢失。静态、使用和动态数据必须受到持续监控&#xff0c;以发现企业数据存储、使用或共享方式的偏…

Docker-如何获取docker官网x86、ARM、AMD等不同架构下的镜像资源

文章目录 一、概要二、资源准备三、环境准备1、环境安装2、服务器设置代理3、注册docker账号4、配置docker源 四、查找资源1、服务器设置代理2、配置拉取账号3、查找对应的镜像4、查找不同版本镜像拉取 小结 一、概要 开发过程中经常会使用到一些开源的资源&#xff0c;比如经…

股票量化系统QTYX开启全自动实盘之路——第一弹easytrader库搭建本地自动交易环境...

搭建全自动化量化系统 股票量化交易系统QTYX最终形态是一款全自动化的量化交易系统。 接下来我们通过一个系列逐步把QTYX升级为全自动的系统。当前为第一篇&#xff1a;使用easytrader库搭建本地自动交易环境 股票的自动化交易接口在2015年之后就被管制了&#xff0c;于是对于普…

黑马JVM总结(十七)

&#xff08;1&#xff09;G1_简介 下面介绍一种Grabage one的垃圾回收器&#xff0c;在jdk9的时候称为默认的回收器&#xff0c;废除了之前的CMS垃圾回收器&#xff0c;它的内部也是并发的垃圾回收器 我们可以想到堆内存过大&#xff0c;肯定会导致回收速度变慢&#xff0c;因…

游戏开发玩法设计的重要性

玩法设计在游戏开发中非常重要&#xff0c;因为它直接影响着玩家的游戏体验和游戏的吸引力。一个精心设计的玩法可以使游戏更具趣味性、挑战性和可玩性&#xff0c;从而吸引更多的玩家并提高游戏的成功度。以下是玩法设计的重要性&#xff1a; 吸引力和沉浸感&#xff1a; 精心…

2023_Spark_实验九:Scala函数式编程部分演示

需求&#xff1a; 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤&#xff1a; 1、文件单词规律&#xff08;空格分开&#xff09; 2、单词切分 3、单词的统计 &#xff08;k,v&#xff09;->(k:单词&#xff0c;V&#xff1a;数量&#xff09; 4、打印 框…

手游模拟器长时间运行后,游戏掉帧且不恢复

1&#xff09;手游模拟器长时间运行后&#xff0c;游戏掉帧且不恢复 2&#xff09;FrameBuffer Fetch无论哪种模式在确定支持的手机上显示全紫 3&#xff09;协程中yield return CoFunction()和yield return StartCoroutine(CoFunction())的区别 这是第353篇UWA技术知识分享的推…

山石网科国产化入侵防御系统,打造全生命周期的安全防护

随着互联网的普及和网络安全的威胁日益增加&#xff0c;botnet感染成为了企业面临的重要问题之一。botnet是一种由分散的客户端&#xff08;或肉鸡&#xff09;组成的网络&#xff0c;这些客户端被植入了bot程序&#xff0c;受控于攻击者。攻击者通过这些客户端的bot程序&#…

win10 查看已连接过的wifi的密码

1 打开管理员模式的CMD 2 输入命令查看WIFI名称 netsh wlan show profiles 上面的列表右边&#xff0c;就是wifi名称 3 输入指令&#xff0c;查看wifi密码 netsh wlan show profile name"WIFI名称" keyclear

淘宝商品详情数据采集

淘宝商品详情数据采集的方法如下&#xff1a; 确定采集目标&#xff1a;明确要采集的商品信息&#xff0c;如商品标题、价格、销量、评论、图片等。选择采集工具&#xff1a;可以选择Scrapy框架、Java的WebMagic框架等。编写爬虫程序&#xff1a;进入目标文件夹&#xff0c;输…

Python语言学习实战-内置函数property()的使用(附源码和实现效果)

实现功能 property()是Python内置函数&#xff0c;用于创建一个特殊的属性&#xff0c;该属性可以像普通属性一样访问&#xff0c;但其值是通过方法计算得出的。它通常用于控制对类的私有属性的访问&#xff0c;以实现更好的封装性和安全性。 property()函数的语法如下&#x…

ThreeJS-3D教学二基础形状展示

three中提供了22 个基础模型&#xff0c;此案例除了 EdgesGeometry、ExtrudeGeometry、TextGeometry、WireframeGeometry&#xff0c;涵盖 17 个形状。 Fog 雾化设置&#xff0c;这是scene场景效果EdgesGeometry , WireframeGeometry 更多地可能作为辅助功能去查看几何体的边和…