基于 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引入字节跳动图标库
672 0
Vue引入字节跳动图标库
|
JavaScript
Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点
Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点
1806 0
|
资源调度 前端开发 算法
前端依赖版本重写指南
感谢神奇的 Semver 动态规则,npm 社区经常会发生依赖包更新后引入破坏变更的情况(应用没有使用依赖锁的话),而应用开发者就要在自己的依赖声明里先临时绕过,避免安装到有问题的版本,如果是一级依赖,只需要改 package.json 的声明就可以了,但如果是子依赖,就需要进行版本重写(overrides/resolution)了。本文是一篇针对版本重写功能的指南性文章,当你遇到如下的问题时,就可以按照对应的依赖重写语法,解决这些依赖问题了。
8257 1
前端依赖版本重写指南
|
JavaScript
基于Vue2.X/Vue3.X对Monaco Editor在线代码编辑器进行封装与使用
这篇文章介绍了如何在Vue 2.X和Vue 3.X项目中封装和使用Monaco Editor在线代码编辑器,包括安装所需依赖、创建封装组件、在父组件中调用以及处理Vue 3中可能遇到的问题。
3705 1
基于Vue2.X/Vue3.X对Monaco Editor在线代码编辑器进行封装与使用
|
JavaScript
Vue3代码展示(vue-codemirror)
`vue-codemirror`插件为Vue应用提供了一个强大的代码编辑器组件,支持代码高亮、自定义样式、暗黑模式等特性。通过简单的配置即可实现丰富的代码编辑体验。安装依赖后,创建`CodeMirror.vue`组件并在目标页面中使用即可。
2580 1
Vue3代码展示(vue-codemirror)
|
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 )的使用
|
移动开发 前端开发
react项目配合diff实现文件对比差异功能
在React项目中,可以使用`diff`库实现文件内容对比差异功能。首先安装`diff`库,然后在组件中引入并使用`Diff.diffChars`或`Diff.diffLines`方法比较文本差异。通过循环遍历`diff`结果,可以生成不同样式的HTML元素来高亮显示文本差异。
858 1
react项目配合diff实现文件对比差异功能
|
前端开发 JavaScript
前端vue:解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
前端vue:解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
前端vue:解决Invalid prop: type check failed for prop “model“. Expected Object, got Array问题
|
资源调度 JavaScript 前端开发
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
这篇文章介绍了在Vue 2项目中如何通过`v-viewer`插件实现图片的预览、切换、缩放、旋转等功能,并提供了插件的安装、配置和使用方法。
5064 0
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
|
存储
在 Web 中判断页面是不是刷新
【9月更文挑战第10天】在Web开发中,判断页面是否刷新有多种方法:1) 监听`popstate`事件,检测用户是否通过历史记录访问页面;2) 记录并比较页面加载时间戳,若相差极小,则可能为刷新;3) 利用本地存储设置特定值,若该值不存在或不符合预期,则页面可能被刷新。然而,这些方法并非绝对准确。
745 3