vue中json格式化显示(vue-json-viewer)

打印 上一主题 下一主题

主题 971|帖子 971|积分 2913


1. 安装

使用npm:
  1. $ npm install vue-json-viewer@2 --save
  2. // Vue2
  3. $ npm install vue-json-viewer@3 --save
  4. // Vue3
复制代码
使用yarm:
  1. $ yarn add vue-json-viewer@2
  2. // Vue2
  3. $ yarn add vue-json-viewer@3
  4. // Vue3
复制代码
使用pnpm也可以
2. 使用方法

main.ts中注册插件
  1. import { createApp } from 'vue';
  2. import JsonViewer from 'vue-json-viewer'
  3. import App from './App.vue';
  4. const app = createApp(App);
  5. app.use(JsonViewer )
  6. app.mount('#app');
复制代码
在界面中使用
  1. <template>
  2.          <json-viewer
  3.           :value="data"
  4.           :expand-depth="5"
  5.           copyable
  6.           boxed
  7.           sort
  8.           class="w-100%"></json-viewer>
  9. </template>
  10. <script setup lang="ts">
  11. const data =  {// 注意:绑定得数据一定是JSON,而不是JSON字符串
  12.       total: 25,
  13.       limit: 10,
  14.       data: [
  15.         {
  16.           id: '5968fcad629fa84ab65a5247',
  17.           firstname: 'Ada',
  18.           lastname: 'Lovelace',
  19.         },
  20.       ],
  21.     };
  22. </script>
复制代码
留意:在main.ts文件中可能会出现以下得ts类型报错:
无法找到模块“vue-json-viewer”的声明文件。

解决方法:

  • 先尝试安装 npm i --save-dev @types/vue-json-viewer
  • 如果上面方法不行,在全局的.d.ts 结尾的文件中添加上declare module 'vue-json-viewer'
3. json-viewer属性和方法

json-viewer属性:


json-viewer变乱监听:


json-viewer插槽:


json-viewer快捷键:


4. 表格中原始数据和格式化数据切换

实现:给表格中每行数据单独添加一个变量,用于单独控制展示的方式。


  1.    //获取到表格数据后,添加一个自定义变量,记录json显示的方式
  2.     state.tableData.forEach((item) => {
  3.       item.showJsonView = false;
  4.     });
复制代码
  1.    <!--el-table-column 插槽中  -->
  2.      <template #default="scope">
  3.             <div v-if="col.key === 'accountConfig'">
  4.               <el-link
  5.                 type="primary"
  6.                 :underline="false"
  7.                 @click="() => (scope.row.showJsonView = !scope.row.showJsonView)">
  8.                 {{ scope.row.showJsonView ? '原始数据' : '格式化数据' }}
  9.               </el-link>
  10.               <div v-if="scope.row.showJsonView">
  11.                 <json-viewer
  12.                   :value="JSON.parse(scope.row[col.key])"
  13.                   :expand-depth="1"
  14.                   copyable></json-viewer>
  15.               </div>
  16.               <div v-else>
  17.                 <pre class="text-pre-wrap">{{ scope.row[col.key] }}</pre>
  18.               </div>
  19.             </div>
  20.             <div v-else>
  21.               {{ scope.row[col.key] }}
  22.             </div>
  23.           </template>
复制代码
注:如果表格中有el-switch, 单独控制每行的操纵,请求时显示的loading,也是同样的方法实现。
5. 自界说主题:


  • 添加 theme="my-awesome-json-theme" 到JsonViewer的组件属性上
  • 复制粘贴下面的模板并且根据自界说的theme名称做对应调整。
  1. // values are default one from jv-light template
  2. .my-awesome-json-theme {
  3.   background: #fff;
  4.   white-space: nowrap;
  5.   color: #525252;
  6.   font-size: 14px;
  7.   font-family: Consolas, Menlo, Courier, monospace;
  8.   .jv-ellipsis {
  9.     color: #999;
  10.     background-color: #eee;
  11.     display: inline-block;
  12.     line-height: 0.9;
  13.     font-size: 0.9em;
  14.     padding: 0px 4px 2px 4px;
  15.     border-radius: 3px;
  16.     vertical-align: 2px;
  17.     cursor: pointer;
  18.     user-select: none;
  19.   }
  20.   .jv-button { color: #49b3ff }
  21.   .jv-key { color: #111111 }
  22.   .jv-item {
  23.     &.jv-array { color: #111111 }
  24.     &.jv-boolean { color: #fc1e70 }
  25.     &.jv-function { color: #067bca }
  26.     &.jv-number { color: #fc1e70 }
  27.     &.jv-number-float { color: #fc1e70 }
  28.     &.jv-number-integer { color: #fc1e70 }
  29.     &.jv-object { color: #111111 }
  30.     &.jv-undefined { color: #e08331 }
  31.     &.jv-string {
  32.       color: #42b983;
  33.       word-break: break-word;
  34.       white-space: normal;
  35.     }
  36.   }
  37.   .jv-code {
  38.     .jv-toggle {
  39.       &:before {
  40.         padding: 0px 2px;
  41.         border-radius: 2px;
  42.       }
  43.       &:hover {
  44.         &:before {
  45.           background: #eee;
  46.         }
  47.       }
  48.     }
  49.   }
  50. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表