vue实现xml,sql,JSON自动格式化高亮

实现xml,json,sql代码组件格式化高亮:
需要下载的依赖:
在这里插入图片描述

<template><div class="box"><div class="top" v-if="flag"><span class="text">Theme:</span><el-select v-model="defaultOptions.theme" placeholder="请选择编辑器主题" class="select" @change="changeTheme"><el-option v-for="(theme, index) in themes" :key="index" :label="theme.label":value="theme.value"></el-option></el-select><span class="text">Language:</span><el-select v-model="defaultOptions.language" placeholder="请选择格式化语言" class="select"><el-option v-for="(item, index) in languageList" :key="index" :label="item.label" :value="item.value"></el-option></el-select><el-button type="primary" plain class="btn" @click="formatCode">格式化</el-button><el-button type="primary" plain class="btn" @click="clearSelection">清空</el-button></div><div :style="{ height, width }" :id="`monacoEditorContainer${index}`" class="container" @mouseleave="handleValue"></div></div>
</template><script>
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
import 'monaco-editor/esm/vs/editor/contrib/folding/folding.js';
// 代码高亮(将所有支持的语言全部显示)
import 'monaco-editor/esm/vs/basic-languages/monaco.contribution'
import { format } from 'sql-formatter';
import prettyData from 'pretty-data/pretty-data';
// 用于xml语法校验
import xml2js from 'xml2js';export default {props: {flag: { //顶部按钮是否显示type: Boolean,default: true},options: {type: Object,default: () => {}},code: {type: String,},height: {type: String,default: '90%'},width: {type: String,default: '100%'},index: {type: String,default: "01"},},data() {return {defaultOptions: {value: '', // 编辑器的值language: 'xml', //语言folding: true, // 是否折叠theme: 'vs-dark', // 编辑器主题:vs, hc-black, or vs-darkautoIndent: true, // 自动缩进wordWrap: 'on', // 启用自动换行readOnly: false, // 是否只读},languageList: [{ value: 'sql', label: 'SQL' },{ value: 'javascript', label: 'JSON' },{ value: 'xml', label: 'XML' },],themes: [{ value: 'vs', label: 'vs' },{ value: 'vs-dark', label: 'vs-dark' },{ value: 'hc-black', label: 'hc-black' }],monacoEditor: null};},mounted() {this.createMonacoEditor();},watch: {options: {handler() {this.$nextTick(() => {this.monacoEditor.updateOptions(this.standaloneEditorConstructionOptions)})},deep: true},code: {handler(newCode) {this.$nextTick(() => {// 将新数据显示在monacoEditor上this.monacoEditor.setValue(newCode);this.formatCode();});},deep: true,immediate: true,}},computed: {standaloneEditorConstructionOptions() {const options = Object.assign(this.defaultOptions, this.options);if (options.language.toUpperCase() === "JSON") {options.language = "javascript";}return options;}},methods: {formatCode() {const code = this.monacoEditor.getValue();if (!code.trim() || !this.defaultOptions.language) {//  值为空或者语言为空,不执行格式化操作return;}let formattedCode;switch (this.defaultOptions.language) {case 'sql':formattedCode = format(code);break;case 'javascript':try {JSON.parse(code); formattedCode = prettyData.pd.json(code);} catch (error) {this.$message.error(`JSON 解析错误: ${error}`);return;}break;case 'xml':try {// 使用 xml2js 库进行 XML 校验const parser = new xml2js.Parser();parser.parseString(code, (error) => {if (error) {this.$message.error(`XML 解析错误: ${error}`);// Message.error(`XML 解析错误: ${error}`);return;}});formattedCode = prettyData.pd.xml(code);} catch (error) {return;}break;default:return;}monaco.editor.setModelLanguage(this.monacoEditor.getModel(), this.defaultOptions.language);const model = this.monacoEditor.getModel();const formattedContent = {range: model.getFullModelRange(),text: formattedCode,};this.monacoEditor.executeEdits('format', [formattedContent]);},createMonacoEditor() {const container = document.getElementById(`monacoEditorContainer${this.index}`);this.monacoEditor = monaco.editor.create(container, this.standaloneEditorConstructionOptions);},clearSelection() {this.monacoEditor.setValue('');},changeTheme() {monaco.editor.setTheme(this.defaultOptions.theme);},handleValue() {			this.formatCode();this.$emit('getValue', this.monacoEditor.getValue())// 鼠标失去焦点document.activeElement.blur();},},
};
</script><style scoped lang="less">
.box {width: 100%;height: 100%;.top {margin-bottom: 10px;.text {margin-right: 4px;}.btn {margin-right: 20px;margin-left: 0px;}.select {width: 200px!important;margin-right: 20px;}}.container {// width: 100%;// height: 90%;// margin-top: 20px;}
}
</style>

实现效果:
在这里插入图片描述

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

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

相关文章

Vue2:路由守卫实现权限管理之全局前置路由守卫

一、情景说明 我们访问任何一个互联网系统&#xff0c;如淘宝、CSDN等&#xff0c;都会遇到按钮权限的情况。 那么&#xff0c;如何在Vue项目中实现按钮权限控制了&#xff1f; 这里就用到了路由守卫技术 它可以类比于SpringBoot项目中的拦截器。 在拦截器里做的权限控制。 …

惠普 DsekJet GT 5810/5820常见问题及解决方法

1、HP DeskJet GT 5810/5820机器的屏幕出现“P”时&#xff0c;该如何操作&#xff1f; 当屏幕出现“P”时&#xff0c;放入A4纸&#xff0c;按住“进纸键”3秒即可&#xff0c;打印机会打印出一张校准页。 2、HP DeskJet GT 5810/5820机器的屏幕出现“A”时&#xff0c;该如何…

【开源】JAVA+Vue.js实现食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…

Redis常见的15个【坑】,避坑指南

一、常见命令 1.1 过期时间意外丢失 原因&#xff1a; SET命令如果不设置过期时间&#xff0c;那么Redis会自动【擦除】这个key的过期时间 1.2 DEL命令阻塞redis key是String类型时&#xff0c;DEL时间复杂度是O(1)key是List/Hash/Set/ZSet类型&#xff0c;DEL时间复杂度是…

开发知识点-前端-layUI

layui layertabletable render <script type"text/html" id"buttonTpl">{{# if(d.check true){ }}<button class"layui-btn layui-btn-xs">已审核</button>{{# } else { }}<button class"layui-btn layui-btn-prim…

#include “stdafx.h“代码的位置,导致编译通不过

1.先上代码: #include <iostream> //std::cout #include <iterator> //std::distance #include <list> //std::list using namespace std;#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { list<int> mylist; …

神经网络算法详解

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 引言 神经网络&#xff0c;作为人工智能和机器学习领域的核心技术之一&#xff0c;具有极其重要的意义。它们通过模拟人类大脑的工作机制&#…

【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)

一、介绍 弹性布局&#xff08;Flex&#xff09;提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴&#xff0c;子元素默认沿主轴排列&#xff0c;子元素在主轴方向的尺寸称为主轴尺寸&#xff0c;在交叉轴方向的尺寸称为交叉轴尺寸…

高效学习编程语言的策略与实践

目录 写在开头1 确定学习目标1.1 明确学习动机1.2 设定短期和长期目标1.3 选择合适的编程语言1.4 结合实际情况调整目标 2 基础知识储备2.1 掌握核心语法2.2 理解编程范式和思维方式2.3 学习基本的数据结构和算法 3 制定学习计划3.1 确定学习时间和频率3.2 选择合适的学习资源3…

(Linux学习七)进程介绍

一、进程 进程生命周期&#xff1a;由系统程序。form出来的子程序&#xff0c;具备一定的父的资源&#xff08;权利&#xff0c;内存空间&#xff0c;PID&#xff09;直到运行完毕&#xff0c;退出系统 查看进程 ps aux 查看所有进程参数&#xff1a;aux ps a 显示现行…

详细分析Linux内存知识并释放内存

目录 前言1. 基本知识1.1 free1.2 cat /proc/meminfo1.3 slabtop 2. 清空内存 前言 本篇文章主要分析内存 如果是磁盘空间&#xff0c;推荐阅读&#xff1a;服务器出现根目录磁盘满了解决方法 1. 基本知识 在Linux系统中&#xff0c;查看内存的基本知识包括以下几个方面&…

蓄力绽放,2024上海帽子围巾手套展FAE倒计时20天

蓄力绽放&#xff0c;2024上海帽子围巾手套展FAE倒计时20天 刚刚过去的2023年&#xff0c;在面对复杂严峻的外部环境下&#xff0c;我国帽子围巾手套及服饰配饰行业经受住了前所未有的严峻考验。步入2024后&#xff0c;随着国内消费需求的逐步回暖和改善&#xff0c;及深入开发…

测试一下测试u一下3月5日

目录 前言 1. 环境准备 2. 在EB tresos上配置MCAL 步骤1&#xff1a;下载软件 步骤2&#xff1a;安装EB Tresos 23 步骤3&#xff1a;安装MCAL 3. 新建EB工程 4. 导出Arxml文件 前言 前面已经讲解了MCAL的作用。按照博主的理解&#xff0c;配置autosar工程肯定是从驱动…

Feign的性能优化

Feign的性能优化 Feign底层的客户端实现: URLConnection&#xff1a;默认实现&#xff0c;不支持连接池. Apache HttpClient&#xff1a;支持连接池 OKHttp&#xff1a;支持连接池 因此优化Feign的性能主要包括: 使用连接池代替默认的URLConnection 日志级别&#xff0c;…

让计算机保持记忆——变量和常量

程序中用于指定数值保存位置的方法&#xff0c;分为变量和常量。 在数学方程式中&#xff0c;类似x和y这类用于指代要求取得值的符号称为变量。顾名思义&#xff0c;这个值会发生变化。此外&#xff0c;将程序执行过程中会发生变化的各种数据保存在内存时也会使用变量。 如果需…

京东、淘宝天猫、1688无货源API(商品详情、店铺商品、商品列表)

item_get 获得淘宝商品详情 item_get_pro 获得淘宝商品详情高级版 item_review 获得淘宝商品评论 item_search 按关键字搜索淘宝商品 item_search_img 按图搜索淘宝商品&#xff08;拍立淘&#xff09; item_search_shop 获得店铺的所有商品 item_search_seller 搜索店铺列表 …

大气颗粒物与VOCs PMF源解析:环保行业的新利器

在现今日益严峻的环境问题中&#xff0c;大气颗粒物和臭氧污染尤为突出&#xff0c;它们不仅深刻影响着全球气候和生态环境&#xff0c;更对人体健康构成了严重威胁。为了有效应对这一挑战&#xff0c;我们首先需要深入了解颗粒物和臭氧的来源&#xff0c;特别是臭氧的前体物之…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

自动驾驶预测与决策规划(nuplan数据集)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.概述 2 数据采集 3.开环与闭环仿真 4.数据注释 5.场景 6.规划框架 6.1Train 6.2Simulation 6.3Metric 6.4Visualization 7.下载…

curlbuild.h:138:36: error: ‘socklen_t’ does not name a type

linux下调用libcurl.so时报错 解决&#xff1a;在引用curl.h之前添加socklen_t的引用&#xff0c;即#include <sys/socket.h>或 #include <unistd.h> 参考&#xff1a;https://blog.csdn.net/q454955979/article/details/72903463