前端使用JSON编辑器、java编辑器、浏览器中使用eslint

这篇具有很好参考价值的文章主要介绍了前端使用JSON编辑器、java编辑器、浏览器中使用eslint。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、vue3中使用Json 编辑器

// 安装
npm install vue3-json-editor --save        npm install vue3-json-editor@latest --save 
// 项目中使用(两种导入方式本质上一致,区别在于模块的默认导出方式不同)
import { Vue3JsonEditor } from 'vue3-json-editor/dist/vue3-json-editor.cjs.js' // 使用了ES6的解构赋值语法,从CommonJS规范导出的模块中,显式地导入了名称为Vue3JsonEditor的变量。这样的话,您需要在代码中显式地使用该变量来创建组件
import Vue3JsonEditor from 'vue3-json-editor' // 直接导入了默认导出的组件,可以直接使用Vue3JsonEditor变量来创建组件(已经配置了Webpack或Vite等构建工具使其能够识别.vue文件,并通过单文件组件的方式进行开发)
import { Vue3JsonEditor } from 'vue3-json-editor/dist/vue3-json-editor.cjs.js';
<Vue3JsonEditor 
	v-model="debugInput"  // 双向绑定数据
	@json-change="jsonChange"   // 改变调用事件
	@json-save="onJsonSave"  // 保存调用事件
	@has-error="onError" 
	key="1" 
	:mode="'text'"   // 默认模式tree(tree,code,form,text,view)  text文本结构,比较好添加和编辑内容.树结构看数据比较直观,还可以添加你想要的类型的数据
	ref="editor" 
	:showBtns="false"  // 是否展示保存按钮
	:expandedOnStart="true"  // 是否展开JSON编辑器模式
	v-if="form.method==2" c
	lass="command-issuing-script-json" 
	@@blur="validate" 如果需要校验json是否正确,可以监测@blur事件,使用editor.validate()来校验json数据
/>

 const jsonChange = (val) => {
      state.debugInput = val
      state.hasJsonFlag = true
 }
  const onError = (err) => {
      state.hasJsonFlag = false
  }
	// 在组件中增加 exportJson 方法
    const exportJson = () => {
      const data = editor.value.getJSON()  // 在组件实例上获取
      const jsonDataStr = JSON.stringify(data, null, 2) // 拿到json字符串
      // 注意也可以直接拿动态绑定的字段
      const blob = new Blob([jsonDataStr], { type: 'application/json' })
      const url = URL.createObjectURL(blob)
      const link = document.createElement('a')
      link.href = url
      link.download = 'data.json'
      link.click()
      URL.revokeObjectURL(url)
    }

// 主要功能点1)支持双向绑定:您可以使用 v-model 指令将 Vue3JsonEditor 组件与父组件中的数据进行双向绑定。并自动格式化

二、react中使用(也可用在vue项目中)可用于java、js、json等
Monaco Editor 是一个浏览器端的代码编辑器,它是 VS Code 编辑器的核心部分,可以提供强大的代码编辑能力,它是 VSCode 的浏览器版本Monaco Editor 的特点包括:
(1)支持多种编程语言
(2)支持语法高亮、智能提示、自动补全等编辑器功能
(3)可以集成到 Web 应用程序中,支持在线代码编辑
https://zhuanlan.zhihu.com/p/88828576

// 安装
npm install monaco-editor --save 
// 使用
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
// 创建一个编辑器容器 div,并设置其大小和位置
const editorContainer = document.createElement('div');
editorContainer.style.width = '800px';
editorContainer.style.height = '600px';
document.body.appendChild(editorContainer);
// 初始化编辑器
const editor = monaco.editor.create(editorContainer, {
  value: 'console.log("Hello, world")',
  language: 'javascript'  // 是什么语言 'json'
  readOnly: readOnly || false, // 只读
});

// 导出(借助ioJSON包,IOJSON是一种扩展了JSON格式的数据交换协议,支持更多的数据类型并且允许通过URL引用数据以方便传输大量数据。iojson库提供了一系列API来解析和序列化IOJSON格式的数据,使得Javascript开发者可以方便地使用这种数据交换格式)
npm install iojson
import iojson from 'iojson';
const ioJsonData = '{"name": "Alice", "age": 25}';
const jsObject = iojson.parse(ioJsonData);
console.log(jsObject);
// Output: { name: 'Alice', age: 25 }
iojson.exportJSON(physicModel, `${physicModel.name}`)  // 导出.json文件

三、浏览器中使用eslint: vue3+codemirror6实现简易在线代码编辑器
前端json编辑器,前端
https://www.jb51.net/article/272037.htm

// 项目中使用
npm install eslint-linter-browserify --save-dev(会在packagepackage-lock引入)
npm i vue-codemirror
npm i codemirror   // 在线编辑器
npm i @codemirror/lang-javascript
npm i @codemirror/lint
npm i @codemirror/autocomplete // 自动补全功能
npm i @codemirror/theme-one-dark  // 主题
// 实现弹框中js脚本
import { javascript, esLint } from '@codemirror/lang-javascript'
import { linter, lintGutter } from '@codemirror/lint';
import * as eslint from 'eslint-linter-browserify'
import { basicSetup, EditorView } from 'codemirror'
import { EditorState } from "@codemirror/state";

 <div class="codemirror-script" ref="scriptRef"></div>
 const state = reactive({
            code:
                `function filter(inputData) {
  					var outputData=inputData
 				 	return outputData
				  }`,
            config: {
                parserOptions: {
                    ecmaVersion: 6,
                    sourceType: "module",
                },
                env: {
                    browser: true,
                    node: true,
                },
                rules: ESLINT_RULES,  // 校验规则
            },
            editView: {}
	});
const scriptRef = ref(null)
const openDialog = (row: any) => {
                state.code = `function filter(inputData) {
  					var outputData=inputData
  					return outputData
				}`;
            setTimeout(() => {
                state.editView = new EditorView({
                    state: EditorState.create({
                        doc: state.code,
                        extensions: [
                            basicSetup,
                            javascript(),
                            lintGutter(),
                            linter(esLint(new eslint.Linter(), state.config))
                        ],
                    }),
                    parent: scriptRef.value as any,
                })
            }, 0)
        }

        const onConfirm = () => {
            refForm.value.validate(async (valid: boolean) => {
                if (valid) {
                    let param = { ...form.value }
                    param.script = state.editView.state.doc.text.join("\n") || ''   // 获取当前编辑器的内容字符串
                    // 验证js脚本  是否包含function filter
                    if (!param.script.includes('function filter')) {
                        ElMessage.warning('js脚本必须包含filter过滤函数')
                        return
                    }
                }
            })
        }

三、websocket连接
1、配url连接路径:前端json编辑器,前端
2、代码文章来源地址https://www.toymoban.com/news/detail-804491.html

		state.ws = new ReconnectingWebSocket({ url: state.row.sourceUrl }, (type: string, message: any) => {
						let newMessage = message;
						try {
							newMessage = JSON.parse(message);
						} catch (error) {
							console.log(error);
						}
						state.responseJSON = newMessage;
					});

// 以下是websocket类封装
interface Props {
	url: string;
	reconnectInterval: number; // 重连间隔时间
	heartBeatInterval: number; // 心跳间隔时间
	isOpenHeartbeatMonitore: boolean; // 是否开启心跳监测
	heartMeesage: string; // 心跳发送信息
	maxReconnectAttempts: number; // 最大重连次数
}

export default class ReconnectingWebSocket {
	url: string;
	reconnectInterval: number;
	heartBeatInterval: number;
	ws: any;
	heartMeesage: string;
	isOpenHeartbeatMonitore: boolean;
	data: any;
	maxReconnectAttempts: number;
	private reconnectAttempts: number;
	private isClosed: boolean;
	private heartBeatTimer: any;
	callback: Function;
	constructor(
		{ url, reconnectInterval, heartBeatInterval, heartMeesage, isOpenHeartbeatMonitore = true, maxReconnectAttempts = 3 }: Props,
		callback: Function
	) {
		this.url = url;
		this.reconnectInterval = reconnectInterval || 1000; // 重连间隔时间
		this.heartBeatInterval = heartBeatInterval || 30000; // 心跳间隔时间
		this.ws = null;
		this.isClosed = false;
		this.heartBeatTimer = null;
		this.heartMeesage = heartMeesage;
		this.isOpenHeartbeatMonitore = isOpenHeartbeatMonitore;
		this.maxReconnectAttempts = maxReconnectAttempts;
		this.reconnectAttempts = 0;
		this.connect();
		this.callback = callback;
	}

	connect() {
		if (this.ws) {
			this.ws.close();
			this.ws = null;
		}
		this.ws = new WebSocket(this.url);
		this.ws.onopen = () => {
			this.isOpenHeartbeatMonitore && this.startHeartBeat();
			this.callback('open', 'WebSocket连接成功');
		};
		this.ws.onmessage = (event: { data: string }) => {
			this.callback('message', event.data);
			this.data = event.data;
		};
		this.ws.onclose = () => {
			// 正常和异常关闭
			this.data = null;
			this.stopHeartBeat();
			if (!this.isClosed) {
				// 异常关闭 重连
				if (this.reconnectAttempts < this.maxReconnectAttempts) {
					setTimeout(() => {
						this.reconnectAttempts++;
						this.callback('close', `WebSocket第${this.reconnectAttempts}次重连`);
						this.connect();
					}, this.reconnectInterval);
				} else {
					this.callback('close', `已达到最大重连次数,停止重连`);
				}
			} else {
				this.callback('close', 'WebSocket连接关闭');
			}
		};
	}

	send(data: string) {
		if (this.ws.readyState === WebSocket.OPEN) {
			this.ws.send(data);
		}
	}

	startHeartBeat() {
		this.heartBeatTimer = setInterval(() => {
			this.send(this.heartMeesage); // 发送心跳消息
		}, this.heartBeatInterval);
	}

	stopHeartBeat() {
		this.isOpenHeartbeatMonitore && clearInterval(this.heartBeatTimer);
	}

	close() {
		this.isClosed = true;
		this.ws.close();
	}
}




到了这里,关于前端使用JSON编辑器、java编辑器、浏览器中使用eslint的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity编辑扩展:功能篇之Json数据编辑器

    前言 编辑器扩展算是比较纯粹的功能开发,基本没有什么理论知识,都是一些 Unity 相关接口的使用与数据类型的设计操作等。在本篇文章主要的文字描述基本都是在做代码解释,为了使内容接受度更高,我会尽量描述到代码结构中的每个细节。如果有对此不太了解又很感兴

    2024年02月06日
    浏览(102)
  • 在线json格式化编辑器--在线查看json解析视图并按节点排序,查看,编辑,并可导入导出json

    在线JSON编辑器--视图查看器节点筛选节点编辑插入json导入导出

    2024年04月22日
    浏览(44)
  • UE编辑器格式化xml或json

    UE编辑器格式化XML数据,首先菜单【视图】=》【查看方式】=》【XML】,然后选中需要进行格式化的内容,点击菜单【格式】=》【重新缩进选择】  UE编辑器格式化JSON数据,首先菜单【视图】=》【查看方式】=》【JSON】,然后选中需要进行格式化的内容,点击菜单【格式】=》

    2024年02月11日
    浏览(54)
  • vue-codemirror实现sql和json线上编辑器

    实习小计01 今天老大让写一个线上编辑器,写的是sql和json两个编译器,sql的编译器要有提示, 老大扔过来两个选择,1:vue-codemirror;2:monaco-editor,一个前端小白,只会vue,所以果断选那个我有点沾边的(也就是vue-codemirror),到网上查了一下文档,照着文档大致做出来的,

    2023年04月08日
    浏览(38)
  • java电子病历源码 电子病历编辑器源码 病历在线制作、管理和使用

    电子病历在线制作、管理和使用的一体化电子病历解决方案,通过一体化的设计,提供对住院病人的电子病历书写、保存、修改、打印等功能。电子病历系统将临床医护需要的诊疗资料以符合临床思维的方法展示。建立以病人为中心,以临床诊疗信息为主线,集成门急诊、住

    2024年02月11日
    浏览(56)
  • 如何利用纯前端技术,实现一个网页版视频编辑器?

    介绍:本篇文章打算利用纯前端的技术,来实现一个网页版的视频编辑器。为什么突然想做一个这么项目来呢,主要是最近一直在利用手机剪映来剪辑一些照片或者视频之类的,在剪辑的过程中,突然想到,有没有一种纯网页版的视频剪辑网站呢?于是搜了下,大多为 sass 成

    2024年04月27日
    浏览(46)
  • 前端必备的开发工具推荐——VScode代码编辑器

            VSCode(全称:Visual Studio Code)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。用户可以更改主题和键盘快捷方式实现个性化设置,也

    2024年02月02日
    浏览(61)
  • 前端必备14款业界受欢迎的富文本编辑器

    基于JavaScript和css开发的 Web富文本编辑器, 轻量、简洁、开源免费。 一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。 由百度web前端研发部开发所见即所得富文本web编辑器,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。 一套开源

    2024年02月15日
    浏览(51)
  • 【vscode编辑器插件】前端 php unity自用插件分享

    “思考是最困难的工作,这也许是为什么很少有人这样做。” - 亨利·福特(Henry Ford) 无论是什么语言,我都会选择使用vscode进行开发,我愿称vscode为万能编辑器,他之所以这么强大,得益于丰富的免费插件市场 vscode插件五花八门,但也不是装越多越好,不必要和垃圾插件

    2024年02月07日
    浏览(60)
  • springboot集成Camunda,加前端bpmn页面流程编辑器

    搭建流程引擎后端的时候,主要注意springboot版本和Camunda版本之间的兼容性。此次springboot版本2.6.4,Camunda版本7.18.0。pom文件内容如下: pom文件配置好后,通过一般的注解入口@SpringBootApplication,即可启动Camunda流程引擎。 Camunda默认使用的数据库为自带的h2内存数据库,此时一般

    2023年04月18日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包