基于 Vue2.X/Vue3.X 项目引入 vue-code-diff/v-code-diff 代码差异插件并使用

简介: 本文介绍了如何在Vue2.X和Vue3.X项目中引入并使用`vue-code-diff`和`v-code-diff`代码差异插件来展示和比较代码变化。

基于 Vue2.X/Vue3.X 项目引入 vue-code-diff/v-code-diff 代码差异插件并使用

1、Vue2.X的项目

npm i vue-code-diff@1.2.0

父页面:index.vue

<template>
  <div style="padding: 100px;">
    <CodeDiff />
  </div>
</template>

<script>
import CodeDiff from './components/codeDiff'

export default {
   
   
  components: {
   
   
    CodeDiff
  },
  data: () => ({
   
   

  }),
}
</script>

子组件:codeDiff.vue

<template>
  <div class="vue-code-diff">
    <code-diff
      :old-string="oldValue"
      :new-string="newValue"
      :context="10"
      outputFormat="side-by-side"
    />
  </div>
</template>

<script>
  import CodeDiff from 'vue-code-diff'

  export default {
   
   
    components: {
   
   
      CodeDiff
    },
    data: () => ({
   
   
      // 旧值
      // oldValue: 'Starting  ~',

      oldValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 520.' +
                '吾,当成赤龍之霸王!沉入红莲炼狱,将真红之光辉指引天道!',

      // 新值
      newValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 1314.' +
                'Finished Spring Data repository scanning in 36 ms. Found 0 LDAP repository interfaces.' +
                'Started TornaApplication in 4.848 seconds (JVM running for 5.829) ~'

      // newValue: 'Starting  ~'
    }),
    watch: {
   
   

    },
    created() {
   
   

    },
    methods: {
   
   
      /**
       * 设置新旧资源值方法句柄
       */
      handleSetResourceValues(oldValue, newValue) {
   
   
        this.oldValue = oldValue;
        this.newValue = newValue;
        console.log("setResourceValues =>", this.oldValue, this.newValue);
      }
    }
  };
</script>

<style lang="less" scoped>
  .vue-code-diff {
   
   
    margin: 0;
    padding: 0;

    /deep/ .d2h-wrapper {
   
   

      .d2h-file-wrapper {
   
   
        border: unset;
        border-radius: unset;
        margin-bottom: unset;

        .d2h-files-diff {
   
   
          display: flex;

          .d2h-file-side-diff {
   
   
            position: relative;
            overflow: hidden;
            background-color: #fee8e9;

            .d2h-code-wrapper {
   
   

              .d2h-diff-table {
   
   

                .d2h-diff-tbody {
   
   

                  tr {
   
   

                    // 设置表头的第2个单元格大小高度
                    td:nth-child(2).d2h-info {
   
   
                      width: 100%;
                      height: 15px;

                      .d2h-code-side-line {
   
   
                        height: 100%;
                      }
                    }

                    // 当单行溢出换行时,需要把行号的高度撑满
                    td.d2h-code-side-linenumber {
   
   
                      height: 100%;
                    }

                    // 删除代码的变更
                    td.d2h-del {
   
   

                      .d2h-code-side-line {
   
   

                        .d2h-code-line-ctn {
   
   

                          .hljs {
   
   
                            font-family: "Microsoft YaHei","微软雅黑";
                            height: auto;
                            font-size: 14px;
                            white-space: pre-line; // 代码换行
                          }
                        }
                      }
                    }

                    // 新增代码的变更
                    td.d2h-ins {
   
   

                      .d2h-code-side-line {
   
   

                        .d2h-code-line-ctn {
   
   

                          .hljs {
   
   
                            font-family: "Microsoft YaHei","微软雅黑";
                            height: auto;
                            font-size: 14px;
                            white-space: pre-line; // 单行溢出换行
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          .d2h-file-side-diff + .d2h-file-side-diff {
   
   
            background-color: #dfd;
          }
        }
      }
    }
  }
</style>

2、Vue3.X的项目

npm i v-code-diff@1.3.2

父页面:index.vue

<template>
  <div style="padding: 100px;">
    <CodeDiff />
  </div>
</template>

<script>
import CodeDiff from './components/codeDiff'

export default {
   
   
  components: {
   
   
    CodeDiff
  },
  data: () => ({
   
   

  }),
}
</script>

子组件:codeDiff.vue

<template>
  <div class="v-code-diff">
    <code-diff
      :old-string="oldValue"
      :new-string="newValue"
      :context="10"
      outputFormat="side-by-side"
    />
  </div>
</template>

<script>
  import {
   
    CodeDiff } from 'v-code-diff'

  export default {
   
   
    components: {
   
   
      CodeDiff
    },
    data: () => ({
   
   
      // 旧值
      // oldValue: 'Starting  ~',

      oldValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 520.' +
                '吾,当成赤龍之霸王!沉入红莲炼狱,将真红之光辉指引天道!',

      // 新值
      newValue: 'Starting TornaApplication using Java 1.8.0_242 on 帅龍之龍 with PID 1314.' +
                'Finished Spring Data repository scanning in 36 ms. Found 0 LDAP repository interfaces.' +
                'Started TornaApplication in 4.848 seconds (JVM running for 5.829) ~'

      // newValue: 'Starting  ~'
    }),
    watch: {
   
   

    },
    created() {
   
   

    },
    methods: {
   
   
      /**
       * 设置新旧资源值方法句柄
       */
      handleSetResourceValues(oldValue, newValue) {
   
   
        this.oldValue = oldValue;
        this.newValue = newValue;
        console.log("setResourceValues =>", this.oldValue, this.newValue);
      }
    }
  };
</script>

<style lang="less" scoped>
  .v-code-diff {
   
   
    margin: 0;
    padding: 0;
  }
</style>

3、效果如下

目录
相关文章
|
JavaScript
Vue引入字节跳动图标库
Vue引入字节跳动图标库
840 0
Vue引入字节跳动图标库
|
前端开发 API
解决el-table中横向滚动条无法显示的问题
解决el-table中横向滚动条无法显示的问题
4381 0
|
存储 JavaScript
vue中query路由传参刷新页面后数据丢失解决
vue中query路由传参刷新页面后数据丢失解决
|
JSON 数据格式
vue-codemirror代码编辑器使用方法
vue-codemirror代码编辑器使用方法
vue-codemirror代码编辑器使用方法
|
JavaScript 前端开发
Vue3解析markdown解析并实现代码高亮显示
Vue实现博客前端,需要实现markdown的解析,如果有代码则需要实现代码的高亮。 Vue的markdown解析库有很多,如markdown-it、vue-markdown-loader、marked、vue-markdown等。这些库都大同小异。这里选用的是marked,代码高亮的库选用的是highlight.js。
2070 0
Vue3解析markdown解析并实现代码高亮显示
|
JavaScript
基于Vue2.X/Vue3.X对Monaco Editor在线代码编辑器进行封装与使用
这篇文章介绍了如何在Vue 2.X和Vue 3.X项目中封装和使用Monaco Editor在线代码编辑器,包括安装所需依赖、创建封装组件、在父组件中调用以及处理Vue 3中可能遇到的问题。
4093 1
基于Vue2.X/Vue3.X对Monaco Editor在线代码编辑器进行封装与使用
|
JavaScript 前端开发 API
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用
本文介绍了如何在Vue 3项目中使用v-md-editor组件库来创建markdown编辑器和预览组件。文章提供了安装步骤、如何在main.js中进行全局配置、以及如何在页面中使用VMdEditor和VMdPreview组件的示例代码。此外,还提供了一个完整示例的链接,包括编辑器和预览组件的使用效果和代码。
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用
|
JavaScript
Vue3代码展示(vue-codemirror)
`vue-codemirror`插件为Vue应用提供了一个强大的代码编辑器组件,支持代码高亮、自定义样式、暗黑模式等特性。通过简单的配置即可实现丰富的代码编辑体验。安装依赖后,创建`CodeMirror.vue`组件并在目标页面中使用即可。
3027 1
Vue3代码展示(vue-codemirror)
|
资源调度 JavaScript 前端开发
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
这篇文章介绍了在Vue 2项目中如何通过`v-viewer`插件实现图片的预览、切换、缩放、旋转等功能,并提供了插件的安装、配置和使用方法。
5550 0
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
|
存储 资源调度 JavaScript
Vue3如何使用Pinia详细介绍、pinia持久化存储(pinia-plugin-persistedstate详细配置)
Vue3如何使用Pinia详细介绍、pinia持久化存储(pinia-plugin-persistedstate详细配置)