杂文之vue-json-viewer

2,530 阅读2分钟

一、介绍

用它自己的话说就是一个简单的 JSON 查看器组件,地址

1、安装

使用 npm:

// Vue2
$ npm install vue-json-viewer@2 --save
// Vue3
$ npm install vue-json-viewer@3 --save

使用 yarn:(我没用这个)

// Vue2
$ yarn add vue-json-viewer@2 
// Vue3
$ yarn add vue-json-viewer@3 

2、使用

import Vue from 'vue'
import JsonViewer from 'vue-json-viewer'

// 非全局的不用写这个,直接在组件中使用标签引入
Vue.use(JsonViewer)

字体大小好像没用,我是在那看的来着,忘记了

<JsonViewer
 :value="formJson"
 :font-size="16"
 :expand-depth="4"
 :copyable="copyable"
 show-double-quotes
 ></JsonViewer>
 

 //这个比较有用
 copyable: { copyText: "复制", copiedText: "复制完成", timeout: 2000 },

二、选项

属性描述默认值
valuejson对象的值,可以使用v-model,支持响应式必填
expand-depth默认展开的层级1
copyable展示复制按钮,默认文案为:copy、copied!, 你可以设置一个对象{copyText: 'copy', copiedText: 'copied'} 来自定义复制按钮文案false
sort按照key排序展示false
boxed为组件添加一个盒样式false
theme添加一个自定义的样式class用作主题jv-light
expanded默认展开视图false
timeformat自定义时间格式函数time => time.toLocaleString()
preview-mode不可折叠模式,默认全部展开false
show-array-index是否显示数组索引true
show-double-quotes展示key双引号false

三、事件

事件描述
copied复制文本后的事件
keyclick点击key的事件

四、快捷键

名称描述
alt + click展开当前节点下的所有节点

五、自定义主题(没用过,感觉不丑就能用)

  1. 添加 theme="my-awesome-json-theme" JsonViewer的组件属性;
  2. 复制粘贴下面的模板并且根据自定义的theme名称做对应调整。
// values are default one from jv-light template
.my-awesome-json-theme {
  background: #fff;
  white-space: nowrap;
  color: #525252;
  font-size: 14px;
  font-family: Consolas, Menlo, Courier, monospace;

  .jv-ellipsis {
    color: #999;
    background-color: #eee;
    display: inline-block;
    line-height: 0.9;
    font-size: 0.9em;
    padding: 0px 4px 2px 4px;
    border-radius: 3px;
    vertical-align: 2px;
    cursor: pointer;
    user-select: none;
  }
  .jv-button { color: #49b3ff }
  .jv-key { color: #111111 }
  .jv-item {
    &.jv-array { color: #111111 }
    &.jv-boolean { color: #fc1e70 }
    &.jv-function { color: #067bca }
    &.jv-number { color: #fc1e70 }
    &.jv-number-float { color: #fc1e70 }
    &.jv-number-integer { color: #fc1e70 }
    &.jv-object { color: #111111 }
    &.jv-undefined { color: #e08331 }
    &.jv-string {
      color: #42b983;
      word-break: break-word;
      white-space: normal;
    }
  }
  .jv-code {
    .jv-toggle {
      &:before {
        padding: 0px 2px;
        border-radius: 2px;
      }
      &:hover {
        &:before {
          background: #eee;
        }
      }
    }
  }
}

image.png