项目开发过程中遇到展示 json 的场景,且 json 文件体积过大,小则几百kb。vue-json-views 即使加载 1M 左右的 json 文时,结合deep 深度限制,也能实现秒开的速度,组件压所过后体积只有15.7kb,开启gzip压缩后只有4.74kb。
1. 示例及文档
git clone https://gitee.com/zhengyis/vue-json-views.git
npm i
npm run dev
// 或 直接双击index.html
2. 安装
npm i -S vue-json-views // 注意是 views
// 或直接将未编译的组件复制到项目内(推荐该方式,便于自定义修改)
3. 可选配置说明
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
json | 传入的json数据(必填) | Object | – |
closed | 是否折叠全部 | Boolean | false |
deep | 展开深度,越大渲染速度越慢,建议不超过5) | Number | 3 |
icon-style | 折叠按钮样式,可选值为 [square, circle, triangle ] | String | square |
icon-color | 两个折叠按钮的颜色 | Array | theme = vs-code 时,[’#c6c6c6’, ‘#c6c6c6’],其他情况为 [’#747983’, ‘#747983’] |
theme | 可选主题样式,可选值为 [one-dark, vs-code], 不选时为默认的白色主题 | String | – |
font-size | 字体大小,单位 px | Number | 14 |
line-height | 行高,单位 px | Number | 24 |
注:行高和字体大小不建议选用过大值,因为 icon 大小、每行的 padding-left 等参数并不会随之发生改变
4. 应用
4.1 在 vue 中使用
<template>
<json-view :data="jsonData"/>
</template>
<script>
import jsonView from 'vue-json-views'
export default {
components: {
jsonView,
},
data() {
return {
// 可使用 JSON.parse() 对json数据转化
jsonData: {
name:'dog',
age:2,
hobby:{
eat:{
food:'狗粮',
water:'冰可乐'
},
sleep:{
time:'白日梦'
}
}
},
};
},
};
</script>
4.2 在非工程化的项目内引用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="build/index.js"></script>
<style>
#app{
height: 400px;
}
</style>
</head>
<body>
<div id="app">
<json-view :data="json"/>
</div>
<script>
window.onload = function(){
new Vue({
el:'#app',
data(){
return {
json:{}
}
},
components:{
jsonView:window['vue-json-view'].default
}
})
}
</script>
</body>
</html>
5. 关于二次开发
可根据自己项目的实际情况进行如下开发:
- 主题定制:根据需求定制主题,不同的主题名称会给组件定义对应的class名称,根据class重新定义样式即可,可参见项目内的主题配置;
- 修改icon样式:项目内icon使用的svg,支持三种样式,可自定义更换或者删除不需要的svg文件,以降低打包体积;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/141415.html