json 编辑器使用总结
在新的项目中,需要对设备进行消息下发。
这里需要对 json 格式的数据进行编辑操作并下发,因此这里引用了 json-editor-vue3 这个组件。
在此做一些总结:
安装与引用
js-nolint
npm install json-editor-vue3安装后在对应使用的页面里面引用,这里因为用的 vue3+ts 可能会报一个无法引入的错误。
ts
import JsonEditorVue from 'json-editor-vue3';这个时候就需要在 main.ts 旁边新建一个文件去声明,我这里新建的是 declare.d.ts。
ts
declare module 'json-editor-vue3';接着在 main.ts 里面去引入这个声明即可。
ts
import "./view/declare.d.ts"使用
在对应的使用页面引入好之后,直接使用即可。这里默认是英文显示的,设置了 language 即可转换为中文显示。
html
<json-editor-vue ref="jsonEditor" class="editor" style="width: 100%;" v-model="form.params" language="['zh-cn']" />深色样式修改
在这里为了适应项目的主题色,我对这个插件的样式进行了一些修改。引入到使用该插件的页面即可。
css
::v-deep .jsoneditor {
color: #fff;
border: thin solid #de7f29;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
height: 100%;
position: relative;
padding: 0;
line-height: 100%;
}
::v-deep .jsoneditor-menu {
width: 100%;
height: 35px;
padding: 2px;
margin: 0;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: #fff;
background-color: #de7f29;
border-bottom: 1px solid #de7f29;
}
::v-deep .ace-jsoneditor .ace_gutter,
::v-deep .ace-jsoneditor .ace_marker-layer .ace_active-line {
background: #2b2b2b;
color: #fff;
}
::v-deep .ace-jsoneditor .ace_variable {
color: #fff;
}
::v-deep .ace-jsoneditor .ace_gutter-active-line {
background-color: #222;
}
::v-deep .ace-jsoneditor .ace_scroller {
background-color: #222;
}
::v-deep .jsoneditor-statusbar {
line-height: 26px;
height: 26px;
color: #fff;
background-color: #2b2b2b;
border-top: 1px solid #222;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-size: 14px;
}
::v-deep .ace-jsoneditor .ace_text-layer {
color: #fff;
}然后你会发现终端抛出了警告:
js-nolint
::v-deep usage as a combinator has been deprecated. Use :deep(<inner-selector>) instead of ::v-deep <inner-selector>.原因在于组合器的用法废弃,要使用新的语法来代替。
所以修改如下:
css
::v-deep(.jsoneditor) {
color: #fff;
border: thin solid #de7f29;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
height: 100%;
position: relative;
padding: 0;
line-height: 100%;
}
::v-deep(.jsoneditor-menu) {
width: 100%;
height: 35px;
padding: 2px;
margin: 0;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: #fff;
background-color: #de7f29;
border-bottom: 1px solid #de7f29;
}
::v-deep(.ace-jsoneditor .ace_gutter),
::v-deep(.ace-jsoneditor .ace_marker-layer .ace_active-line) {
background: #2b2b2b;
color: #fff;
}
::v-deep(.ace-jsoneditor .ace_variable) {
color: #fff;
}
::v-deep(.ace-jsoneditor .ace_gutter-active-line) {
background-color: #222;
}
::v-deep(.ace-jsoneditor .ace_scroller) {
background-color: #222;
}
::v-deep(.jsoneditor-statusbar) {
line-height: 26px;
height: 26px;
color: #fff;
background-color: #2b2b2b;
border-top: 1px solid #222;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
font-size: 14px;
}
::v-deep(.ace-jsoneditor .ace_text-layer) {
color: #fff;
}