Vue中XML格式新、旧数据进行比较 vue-code-diff(内容会转为JSON格式展示)
Vue中XML格式新、旧数据进行比较 vue-code-diff(内容会转为JSON格式展示)
·
1、概述
在element组件中使用vue-code-diff代码比对组件,比对xml数据
2、代码实现
先安装vue-code-diff
npm install vue-code-diff -S
还需要安装 vue-json-viewer x2js
npm install vue-json-viewer
npm install x2js
# 安装
npm install vue-code-diff
# 在需要应用的地方导入引用
# 导入
import CodeDiff from 'vue-code-diff'
import JSONViewer from 'vue-json-viewer'
# 引入组件
components: { CodeDiff , JSONViewer}
因为数据为xml格式所以需要解析转成JSON,这就用到了x2js
main.js
# 导入
import x2js from 'x2js'
Vue.prototype.$x2js = new x2js()
使用
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="newtext" label="新内容">
<template slot-scope="scope">
<el-popover trigger="hover" placement="bottom" @show="showpopver(scope)" width="600">
<div style="max-height:400px;overflow:auto">
<code-diff class="center" :old-string="oldSting" :new-string="newString" outputFormat="side-by-side" :drawFileList="true" :context="10000" :isShowNoChange="true"/>
</div>
<div slot="reference" class="new">
<el-tag>{{scope.row.newtext}}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column prop="oldtext" label="旧内容"> </el-table-column>
</el-table>
</div>
</template>
<script>
import CodeDiff from 'vue-code-diff'
import JSONViewer from 'vue-json-viewer'
export default {
name: 'HomeView',
components: {
CodeDiff,
JSONViewer
},
data () {
return {
tableData: [
{ date: '2016-05-02', name: '王小虎', newtext: '<?xml version="1.0" encoding="GB18030"?> <RESPONSE> <HEAD> <TRCD>ZX10</TRCD> <BRCHNO>000</BRCHNO> <TRDT>WW</TRDT> </HEAD> <BODY> <LIMIT1>HDGUS</LIMIT1> <ROWS> <ROW-1>0</ROW-1> <ROW-2>1</ROW-2> </ROWS> </BODY> </RESPONSE>', oldtext: '<?xml version="1.0" encoding="GB18030"?> <RESPONSE> <HEAD> <TRCD>ZX10XZ</TRCD> <BRCHNO>000</BRCHNO> <TRDT>WW</TRDT> </HEAD> <BODY> <LIMIT1>HDGUS</LIMIT1> <ROWS> <ROW-1>0</ROW-1> <ROW-2>1</ROW-2> </ROWS> </BODY> </RESPONSE>' },
{ date: '2016-05-04', name: '王小虎', newtext: '<?xml version="1.0" encoding="GB18030"?> <RESPONSE> <HEAD> <TRCD>ZX10</TRCD> <BRCHNO>000</BRCHNO> <TRDT>WW</TRDT> </HEAD> <BODY> <ATTRBTE1>GUGU</ATTRBTE1> <LIMIT1>HDGUS</LIMIT1> <ROWS> <ROW-1>0</ROW-1> <ROW-2>1</ROW-2> </ROWS> </BODY> </RESPONSE>', oldtext: '<?xml version="1.0" encoding="GB18030"?> <RESPONSE> <HEAD> <TRCD></TRCD> <BRCHNO>000</BRCHNO> <TRDT>WW</TRDT> </HEAD> <BODY> <ATTRBTE1>GUGU</ATTRBTE1> <LIMIT1>HDGUS</LIMIT1> <ROWS> <ROW-1>0</ROW-1> <ROW-2>1</ROW-2> </ROWS> </BODY> </RESPONSE>' }
],
oldSting: '',
newString: ''
}
},
methods: {
showpopver (val) {
this.newString = JSON.stringify(this.$x2js.xml2js(val.row.newtext), null, 2)
this.oldSting = JSON.stringify(this.$x2js.xml2js(val.row.oldtext), null, 2)
}
}
}
</script>
<style scoped lang="less">
.center {
line-height: 12px; //用于解决每行内容后会出现上下图标的情况
max-height: 600px;
overflow-y: auto;
overflow-x: hidden;
}
/* 样式穿透-起始行左右对齐,*/
/deep/ .d2h-wrapper .d2h-code-side-line,
.d2h-wrapper .d2h-code-line {
height: 18px;
}
</style>
效果
鼠标移入新内容区域显示比对
差异处会有高亮显示
当比较两个内容没有不同时,会不显示,为了能显示出内容建议可以把context值调大
例如 :context="10000"
vue-code-diff 推荐: GitHub - ddchef/vue-code-diff: vue文件差异对比
更多推荐
已为社区贡献1条内容
所有评论(0)