Skip to content

FxJsonEditor JSON 编辑器 ​

基于 CodeMirror 6 的 JSON 编辑器:v-model 双向绑定 JSON 字符串、实时校验(非法时错误行标红 + 波浪线)、内置工具栏(撤销/重做/折叠/格式化/压缩/全屏/复制)、覆盖式滚动条、--fje-* 主题契约。

基础用法 ​

工具栏与格式化 ​

非只读时顶部自带工具栏(撤销/重做/折叠切换/格式化/压缩/全屏/复制)。动作结果经 error-first 的 action-callback 抛给消费方提示,组件本身不内置任何提示 UI;format / minify 也可通过组件实例直接调用。

只读 ​

只读保留工具栏(自动隐藏撤销/重做/格式化/压缩等写回类动作,保留折叠/全屏/复制),内部不可变更、可选中复制。

禁用 ​

禁用与只读同一工具栏裁剪,整体置灰。

主题 ​

组件走 --fje-* 主题契约:包内不引用任何外部令牌(所有视觉值都是 var(--fje-*, 字面量),独立发包即内置中性亮色主题);theme prop 传入配置即可整体换肤(纯对象 / ref / computed / getter 函数皆可,值可直接写 var(--fx-*) 令牌,亮暗自动跟随)。

vue
<script setup lang="ts">
import { FxJsonEditor, type JsonEditorTheme } from '@fx-core/json-editor'

const editorTheme: JsonEditorTheme = {
  bg: 'var(--fx-bg-color)',
  text: 'var(--fx-text-color-primary)',
  border: 'var(--fx-color-border-control)',
  primary: 'var(--fx-color-primary)',
  danger: 'var(--fx-color-danger)',
}
</script>

<template>
  <FxJsonEditor v-model="text" :theme="editorTheme" />
</template>

校验反馈 ​

非法 JSON 有三层反馈:错误行内标红(波浪线 + gutter 图标,悬浮气泡可读全文)→ 状态栏上方独立错误行(解析错误文案持续可见,超长省略)→ 消费方阻断(@status 携带 { valid, message },可据此禁用提交)。

错误行的展示位置可用 error-placement(inside 默认 / outside 组件整体下方)调整;不需要组件内错误行时传 :show-status-error="false",自行消费 @status。

Props ​

属性类型默认值说明
modelValuestring''绑定值,JSON 字符串(v-model)
widthstring'100%'组件宽度
heightstring''固定高度(优先级最高,作用整个组件)
minHeightstring'120px'最小高度(随内容自动长高)
maxHeightstring'480px'最大高度(超出后编辑器内部滚动)
readonlybooleanfalse只读:可选中复制、无工具栏
disabledbooleanfalse禁用:整体置灰(强于 readonly)
placeholderstring''占位提示
themeJsonEditorThemeInput—主题配置(纯对象 / ref / computed / getter)
actionsJsonEditorToolbarAction[]全部工具栏动作与顺序
actionCallback(error: Error | null, event) => void—工具栏动作回调(error-first)
showStatusErrorbooleantrue无效 JSON 错误行是否组件内展示
errorbooleanfalse错误态:根边框转 danger 色(消费方动态绑定)
errorPlacement'inside' | 'outside''inside'错误行位置(inside 组件内 / outside 组件下方)

Events ​

事件回调参数说明
update:modelValuestringJSON 文本变化时触发
status{ valid: boolean, message: string }校验状态(挂载时与每次文本变化始终抛出)
actionCallback(error: Error | null, event) => void工具栏动作结果(error-first,prop 传入)

Expose ​

方法说明
format格式化(合法时格式化并回写)
minify压缩(合法时去空白回写)