Vue3【四】集成json-editor-vue3

vue3+ts+vite环境中使用json-editor-vue3,记录遇到的奇奇怪怪问题!!! vue3+ts+vite环境中使用json-editor-vue3仅仅简单记录下最近使用这个插件的一些注意事项,这个插件很容易使用的。json-editor-vue3文档以上是我在实际使用json-editor-vue3的过程,最后说下为什么比较强大呢,因为它是由一个错误回掉的,这样我们是可以知道这个输入json内容和不合规的,并且怎么提示。 阅读详情

安装依赖

npm install json-editor-vue3 --save

引入

main.js

import "jsoneditor";

具体模块

import JsonEditorVue from 'json-editor-vue3';

代码实现

<json-editor-vue ref="jsonEditor" class="editor" v-model="state.addFormField.powerTypes" @keyup="jsonValidate" />

完整代码

<template>
  <div>
    <div class="card-wrap" style="padding: 0 12px;">
      <el-form :model="state.queryParams" ref="queryRef" :inline="true" class="form-search-wrap">
        <el-form-item label="code">
          <el-input v-model="state.queryParams.code" clearable style="width: 240px" />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" icon="Search" @click="getList()">Search</el-button>
          <el-button icon="Refresh" @click="resetSearchForm">Reset</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="card-wrap" style="padding-bottom: 100px;">
      <div class="operation-wrap">
        <el-button type="primary" @click="handleEdit(null, 1)">Add</el-button>
        <el-button type="danger" @click="batchRemove" >Remove</el-button>
      </div>
      <el-table :data="state.tableData"
                v-loading="state.loading"
                @selection-change="handleSelectionChange">
        <el-table-column type="selection" width="55" />
        <el-table-column prop="code" label="Code"></el-table-column>
        <el-table-column prop="value" label="Value"></el-table-column>
        <el-table-column prop="i18n" label="I18n"></el-table-column>
        <el-table-column label="Operation" align="center">
          <template #default="scope">
            <el-button type="primary" icon="Edit" @click="handleEdit(scope.row, 0)" circle />
            <el-button type="danger" icon="Delete" @click="remove(scope.row.id, 0)" circle />
          </template>
        </el-table-column>
      </el-table>
      <div class="pagination">
        <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="state.queryParams.page"
            :page-sizes="[10, 20, 50, 100]"
            :page-size="state.queryParams.size"
            layout="total, sizes, prev, pager, next, jumper"
            :total="state.queryParams.total">
        </el-pagination>
      </div>
    </div>
    <el-dialog :title="state.type?'add':'update'" v-model="state.dialogVisible" width="30%"  destroy-on-close @close='resetForm'>
      <el-form ref="addForm" :rules="state.rules" :model="state.addFormField" label-width="100px">
        <el-form-item label="code" prop="code">
          <el-input v-model="state.addFormField.code" style="width: 80%;" ></el-input>
        </el-form-item>
        <el-form-item label="value" prop="value">
          <el-input v-model="state.addFormField.value" style="width: 80%;" ></el-input>
        </el-form-item>
        <el-form-item label="i18n" prop="i18n">
          <el-input v-model="state.addFormField.i18n" style="width: 80%;" ></el-input>
        </el-form-item>
        <el-form-item label="numberOfEngine" prop="numberOfEngine">
          <el-input v-model="state.addFormField.numberOfEngine" style="width: 80%;" ></el-input>
        </el-form-item>
        <el-form-item label="powerTypes" prop="powerTypes">
          <json-editor-vue ref="jsonEditor" class="editor" v-model="state.addFormField.powerTypes" @keyup="jsonValidate" />
        </el-form-item>
        <el-form-item label="siebelCode" prop="siebelCode">
          <el-input v-model="state.addFormField.siebelCode" style="width: 80%;" ></el-input>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="state.dialogVisible = false">Cancel</el-button>
          <el-button type="primary" @click="add">Confirm</el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>

<script setup>
import { reactive, ref } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import * as api from '@/api/dic/common';
import JsonEditorVue from 'json-editor-vue3';

const addForm = ref();
const jsonEditor = ref();
const moduleUrl = "boatType";
const state = reactive({
  multipleSelection: [],
  dialogVisible: false,
  jsonEditFlag: true,
  num: 1,
  loading: false,
  type: "add",
  tableData: [],
  addFormField: {
    id: "",
    code: "",
    value: "",
    i18n: "",
    numberOfEngine: "",
    powerTypes: "",
    siebelCode: "",
  },
  queryParams: {
    code: undefined,
    page: 1,
    size: 10,
    total: 0,
  },
  rules: {
    code: [
      { required: "true", message: "code is required", trigger: ["change"] },
    ],
    value: [
      { required: "true", message: "value is required", trigger: ["change"] },
    ],
    i18n: [
      { required: "true", message: "i18n is required", trigger: ["change"] },
    ],
  },
});

async function jsonValidate () {
  if (jsonEditor.value) {
    const res = await jsonEditor.value.editor.validate();
    if(res.length != 0){
      state.jsonEditFlag = false;
    }else {
      state.jsonEditFlag = true;
    }
  }
}


function handleSelectionChange(val) {
  state.multipleSelection = val
}

function commonRemove(idList) {
  ElMessageBox.confirm('Are you sure to remove this data?')
      .then(() => {
        api
            .remove({idList: idList}, moduleUrl)
            .then((res) => {
              ElMessage.success("success");
            })
            .finally(() => {
              state.loading = false;
            });
        setTimeout(() => {
          getList();
        }, 300);
      })
}

function remove(id){
  let idList = [];
  idList.push(id)
  commonRemove(idList);
}

function batchRemove() {
  if(state.multipleSelection == undefined || state.multipleSelection.length <= 0){
    ElMessage.warning("Please select checkbox");
    return;
  }
  let idList = [];
  state.multipleSelection.forEach((value, index) => {
    idList.push(value.id)
  });
  commonRemove(idList);
}

function handleEdit(row, type){
  if(row){
    state.addFormField = JSON.parse(JSON.stringify(row));
  }
  if (type) {
    state.type = true;
  } else{
    state.type = false;
  }
  state.dialogVisible = true;
}

function resetForm(){
  state.addFormField = {
    id: undefined,
    code: undefined,
    value: undefined,
    i18n: undefined,
  }
}

function resetSearchForm(){
  state.queryParams.code = undefined;
}

function add(){
  addForm.value.validate((valid) => {
    if(!state.jsonEditFlag){
      ElMessage.error("JSON input wrong format");
      return ;
    }
    if (valid) {
      let id = state.addFormField.id;
      if (id) {
        api
            .update(state.addFormField, moduleUrl)
            .then((res) => {
              ElMessage.success("success");
            })
            .finally(() => {
              state.loading = false;
            });
      }else{
        api
            .add(state.addFormField, moduleUrl)
            .then((res) => {
              ElMessage.success("success");
            })
            .finally(() => {
              state.loading = false;
            });
      }
      resetForm();
      state.dialogVisible = false;
      setTimeout(() => {
        getList();
      }, 200);
    } else {
      return false;
    }
  });
}

function getList(){
  state.loading = true;
  let data = {};
  if(state.queryParams){
    data = JSON.stringify(state.queryParams).replace(/:/g, '=').replace(/,/g, '&').replace(/{/g, '?').replace(/}/g, '').replace(/"/g, '');
  }
  api
      .getList(data, moduleUrl)
      .then((res) => {
        state.tableData = res.items;
        state.queryParams.page = res.page;
        state.queryParams.size = res.size;
        state.queryParams.total = res.total;
      })
      .finally(() => {
        state.loading = false;
      });
}

function handleSizeChange(val){
  state.queryParams.size = val;
  getList();
}

function handleCurrentChange(val){
  state.queryParams.page = val;
  getList();
}

getList();
</script>
<style scoped >
/deep/ .el-dialog{
  width: 50%;
}
/deep/ .el-form-item--default{
  margin-left: 30px;
}
.pagination {
  background: #fff;
  padding: 20px 10px 0;
  display: flex;
  justify-content: flex-end;
  box-sizing: border-box;
}
.card-wrap{
  padding: 15px 20px 20px 20px;
  border-radius: 4px;
  border: 1px solid #e6ebf5;
  background-color: #fff;
  overflow: hidden;
  color: #303133;
  -webkit-transition: .3s;
  transition: .3s;
  box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
  margin: 10px;
}
.operation-wrap{
  margin: 0 0 16px 0;
}
.form-search-wrap{
  margin: 10px 0 0 12px;
}
</style>

别再手动改JSON了!用vue-json-editor在Vue3项目中快速搭建可视化配置面板 本文介绍了如何在Vue3项目中使用vue-json-editor快速搭建可视化JSON配置面板,解决手动编辑JSON的痛点。通过树形视图、表单编辑和代码高亮等多种模式,提升开发效率和协作体验,特别适合CMS后台、低代码平台等场景。 阅读详情

相关推荐

vue3-ace-editor前端 json格式化显示 json编辑器使用

项目目录下打开终端 运行。

键指江湖的博客 5107

json-editor-vue3 (Json字段编辑器 )

一、安装插件(这里很正常) 二、json-editor-vue3的使用步骤(这里遇到了问题) 1.导入json-editor-vue3 ①:导入json-editor-vue3(问题出现) ②:解决 (无法找到模块的问题) 2.使用json-editor-vue3 ①步骤说明 ②编写代码如下 ③内容如下图所示: 总结: json-editor-vue3的Api说明 全局引入 组件内引入 模板使用 常见参数 对应的事件

weixin_46022934的博客 1万+

Vue开发者的JSON利器:全方位解析json-editor-vue

无论是开发。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 2060

vue3+json-editor-vue3实现JSON编辑器

开发的vue3 json editor,支持全屏编辑,有完善的事件回调,可以在失去焦点时,对编辑器内容做校验。注:本项目中,按钮样式、成功失败提示,使用了 Ant-Design-Vue,按需安装插件。1. 安装插件 @originjs/vite-plugin-commonjs。四. 关于:vue3+ts无法渲染,报错。2. vite.config.js 内。五. 完整项目代码

qq_54072355的博客 1万+

深度对比:json-editor-vue3在Vue2/Vue3中的差异实践(含Nuxt3全局注册方案)

本文深度对比了json-editor-vue3在Vue2/Vue3项目中的集成差异与实践方案。针对Vue2.6、Vue2.7和Vue3等不同环境,详细解析了依赖配置、Composition API兼容性及构建工具适配等关键问题,并特别提供了Nuxt3中的客户端组件全局注册方案,帮助开发者高效处理多版本Vue项目中的JSON编辑器集成挑战。

ik678901的博客 1107

Vue3项目实战:5分钟搞定JSON编辑器集成(含Monaco与Ace双方案对比)

本文详细介绍了在Vue3项目中快速集成JSON编辑器的两种主流方案:功能强大的Monaco Editor与轻量灵活的Ace Editor。通过对比分析两者的集成步骤、性能特点及适用场景,帮助开发者根据项目需求(如后台管理系统、低代码平台)选择最合适的vue3 json编辑器,并提供了完整的实战代码与常见问题解决方案。

hh234的博客 1058

vue-json-editor json编辑器

1.安装插件 npm install vue-json-editor --save 2.使用 <template> <div> <p>vue-json-editor</p> <vue-json-editor v-model="json" :show-btns="true" // 是否显示保存按钮...

前端小王子 2万+

vue3-ace-editor使用记录

主要记录了在vue3项目中使用vue3-ace-editor及相关配置说明。

Hei, Welcome To vickie's Blog,Good Good Study, Day Day Up ~ 5974

Vue3 集成 json-editor-vue3

在 main.js中添加。

哈 1485

5 款 Vue JSON 编辑器深度对比:从 CodeMirror 到 json-editor-vue 的选型指南

本文深度对比了5款主流Vue JSON编辑器(vue-json-editor、vue-json-pretty、bin-code-editor、CodeMirror和json-editor-vue),从功能支持、性能表现到工程适配性进行全面分析。通过12项核心指标和实际测试数据,为开发者提供选型指南,特别推荐json-editor-vue在表单模式和性能上的优势,帮助开发者根据项目需求选择最适合的JSON编辑器。

weixin_30328063的博客 430

Vue3-Json-发自:自动化构建编辑功能项目

建造知乎案例项目 代码美化设置prettierrc 安装prettierrc插件 创建.prettierrc.json文件 一键格式化yarn prettier --write . 目录结构规则 components编写组件 hooks自定义函数 命名规范 首页 数据结构设计利用interface接口定义 富文本框 图片裁剪 cropper

如何快速集成Vue3-Ace-Editor:打造高效Vue3代码编辑体验的完整指南

Vue3-Ace-Editor是专为Vue 3框架设计的高效代码编辑器组件,基于强大的Ace Editor构建,提供语法高亮、自动补全和实时编辑等专业功能。本文将带你一步步完成从安装到高级配置的全过程,让你在Vue 3项目中轻松嵌入功能丰富的代码编辑模块。 ## ???? 为什么选择Vue3-Ace-Editor?核心优势解析 作为Vue 3生态中备受欢迎的代码编辑解决方案,Vue3-Ace-Ed...

gitblog_01176的博客 1043

Windows下用Docker快速搭建SearXNG私有搜索引擎(附Dify集成配置)

本文详细介绍了在Windows环境下使用Docker快速搭建SearXNG私有搜索引擎的完整流程,包括环境准备、容器化部署、安全配置优化以及与Dify平台的深度集成方法。通过分步指导和实用配置示例,帮助开发者构建兼具隐私保护和AI增强能力的本地化搜索解决方案,特别适合需要定制化搜索服务的应用场景。

weixin_30300225的博客 336

Vue 3 项目集成 json-editor-vue 0.18:支持 512MB 大文件与 3 种编辑模式

本文详细介绍了如何在Vue 3项目中集成json-editor-vue 0.18,该编辑器支持处理高达512MB的大文件并提供三种编辑模式(树形、代码、表格)。通过性能对比和实战案例,展示了其在处理复杂JSON数据时的优势,包括快速反序列化和流畅的大文件操作体验。文章还提供了安装指南、模式解析及高级特性集成方案,帮助开发者高效应对数据密集型应用场景。

weixin_30784501的博客 420

perftest实战:从零到一,精准评估RDMA网络性能

想象一下,两台服务器传输数据就像在同一个主板上交换内存,这种零拷贝、低延迟的特性,正是高性能计算、分布式存储等场景梦寐以求的。对于云环境用户,主流云厂商现在都提供RDMA实例(比如AWS的EFA、阿里云的eRDMA)。但要注意,不同机型支持的RDMA协议版本可能不同,这会直接影响测试结果的上限值。记得记录每次测试的BW average值,绘制成曲线图后,你可能会发现类似"阶梯状"的性能变化,这通常与网卡的DMA引擎设计有关。在云环境中,由于虚拟化层的影响,延迟会比裸金属高20-30%。

weixin_28700411的博客 210

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 397

Vue中 引入使用 vue-json-editor

1. 安装vue-json-editor npm install vue-json-editor --save 2. 在vue组件中使用vue-json-editor <template> <div class = "routeManagement"> <vue-json-editor v-model="routeJson" :showBt...

明天也要努力的博客 8414

2025年GESP12月认证C++一级真题解析

摘要 本文包含13道C++编程选择题,每题2分,涉及语法、运算符、循环、条件判断等知识点。题目考察了变量命名规则、运算符优先级、赋值语句、循环控制、格式化输出等内容。部分题目解析与标答存在差异,例如第4题逗号表达式输出应为5但标答为4,第6题赋值运算结果应为4 4但标答为3 4等。这些题目适合用于检验基础编程能力,但需注意部分标答可能存在争议,建议结合具体编译环境验证。最后一题考察"漂亮数"判断,要求填写数字某位能被3整除的条件表达式。

lan_in的博客 740

json-editor-vue 和 vue-json-pretty 怎么选?一份 JSON 查看组件选型终极指南

在 Vue 项目里展示 JSON 数据时,最经典的选型难题就是:JSON 查看组件选 json-editor-vue,还是 vue-json-pretty?本文用一张对比表 + 4 个真实场景,帮你在 3 分钟内做出不后悔的决定。 ## 🎯 一句话总结:看"只读展示"还是"可编辑编辑" - **vue-json-pretty**:轻量级 **JSON 查看组件**,只读树形结构、语法高亮、折

gitblog_00202的博客 1006

openharmony之启动恢复子系统详解

需求: 添加一个名为my_service的自定义服务步骤1: 创建服务配置],],"env": [步骤2: 添加到主配置],"jobs": ["cmds": [步骤3: 验证配置# ✅ 检查配置格式 jq . /system/etc/init/my_service.cfg # 🔄 重新加载配置 begetctl reload # 📊 验证服务状态 begetctl dump_service my_serviceOpenHarmony init进程的完整生命周期。🔄 三阶段启动模型⚙️ 配置体系。

m0_67505153的博客 596

Unreal5从入门到精通之如何在VR中使用3DUI

前面我们讲过《Unreal5从入门到精通之UMG的使用》一般制作游戏时,UI都是添加到屏幕视窗上面的,但是在制作VR时,我们往往需要制作一个3D的UI,放置在场景中,然后使用手柄的射线来和UI进行交互。今天我们就来讲解下,如何在VR中创作和交互3DUI首次操作会感觉好复杂,多多练习,当你熟悉了UE蓝图的操作后会发现,这只是一个常规的蓝图操作而已。祝大家在虚幻的学习过程中非常顺利。希望这篇博客对你有所帮助。

TxNet 1982

VUE3使用JSON编辑器

VUE3使用JSON编辑器

蓦然回首,那人却在,灯火阑珊处。 4479

WordPress MasterStudy LMS插件 SQL注入漏洞复现(CVE-2024-1512)

WordPress Plugin MasterStudy LMS 3.2.5 版本及之前版本存在安全漏洞,该漏洞源于对用户提供的参数转义不足,导致可以通过 /lms/stm-lms/order/items REST 路由的 user 参数进行基于联合的 SQL 注入。

0xSec 1435

如何快速安装 json-editor-vue:5 分钟给 Vue 2/3 项目添加 JSON 编辑组件的完整教程

json-editor-vue 是一款 Vue 2/3 同构的 JSON 编辑器、查看器、格式化与校验组件。无论你用的是 Vue 2.6、Vue 2.7 还是 Vue 3,只需一条安装命令,再写十几行代码,就能在页面里加上一个支持树形、文本双模式的专业级 JSON 编辑组件。本文就是这份"5 分钟上手"的完整安装教程,照做即可。 [![json-editor-vue 文本模式下的 JSON 编辑

gitblog_00572的博客 480

R数据分析:潜在转化分析LTA的做法和解释(一)

之前给大家写了很多潜在类别分析的教程Mplus教程:如何做潜在类别分析LCAR数据分析:用R语言做潜类别分析LCAMplus数据分析:潜在类别分析(LCA)流程(详细版)R数据分析:再写潜在类别分析LCA的做法与解释,今天继续给大家拓展一步。 今天要介绍的就是潜在转换分析,这个东西就是LCA的纵向版本。是一个专门用来研究质变的统计技巧。有一句话叫做量变起质变,你怎么知道质变到底发生没有?就用潜在转换分析。 Latent transition analysis is an extension of...

Codewar的博客 7701

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何快速掌握JSON Editor Vue:2024年最全面的Vue JSON编辑工具指南

JSON Editor Vue是一款功能强大的Vue 2/3 isomorphic JSON编辑器,它集查看、编辑、格式化和验证功能于一体,为开发者提供了高效处理JSON数据的解决方案。无论是新手还是有经验的开发者,都能通过这款工具轻松应对各种JSON相关任务,提升工作效率。 ## 🚀 JSON Editor Vue的核心优势 JSON Editor Vue之所以能在众多JSON编辑工具中脱

gitblog_00080的博客 641

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: Vue3【六】实现页面简单的增删改查
下一篇: 优快云博客迁移至Hexo
宁漂打工仔
博客等级 码龄9年 1万+粉丝 153原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁漂打工仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值