记一次高版本view-design的组件迁移到自身项目的低版本

背景

bash 复制代码
npm i -S view-design

当前老项目使用view-design这个组件库,但是当我们去官网查看该组件库最新版本,竟然发现没有博主想用的image/ImagePreivew这两个基础组件

说实话,有点离谱了哈!!

自己造轮子?

貌似为了一天的小需求,不太可能,直接找view-design的弟弟view-ui-plus它的这两个基础组件,然后整合进去

进入主题

  1. 先给大家介绍一个vs-code的插件,这样大家操作起来会简单点(好有爱的博主!!)

然后利用这个插件,把viewuiplus的源码打开,找到这image/ImagePreivew 两个组件的代码,

接下来我会说一下,我们需要更改的部分

  1. 当你把源码放到项目,那么你项目中就会多出这两个组件的文件夹,就想这样

由于view-design是基于vue2.x版本封装的组件,而view-ui-plus是基于vue3.x写的 。拷贝之后,代码中会出现很多新的api和组件使用,我们要一一替换成vue2.x版本的写法。

替换写法【要先初步看看这两个组件的代码哈】

.vue文件

文件中出现的getCurrentInstance()的api,是vue3组合api中用来获取vue实例的,所以我们在vue2中,直接this就可以, 用代码表述意思就是

javascript 复制代码
// vue3
import { getCurrentInstance } from 'vue';

// 获取组件实例
const global = getCurrentInstance().appContext.config.globalProperties;
javascript 复制代码
// vue2
this

但是,这里直接采用固定的默认值就行,举个栗子【其他的同理改】

javascript 复制代码
transfer: {
    type: Boolean,
    default () {
        const global = getCurrentInstance().appContext.config.globalProperties;
        return !global.$VIEWUI || global.$VIEWUI.transfer === '' ? false : global.$VIEWUI.transfer;
    }
},

替换成

javascript 复制代码
transfer: {
    type: Boolean,
    default () {
        return false;
    }
},

image-preview.js

默认都是vue3的写法,它直接使用了vue库中提供的createApphgetCurrentInstance, 以及mount方法, 我们改写成vue2写法:

javascript 复制代码
ImagePreview.newInstance = properties => {
    if (!isClient) return;
	...

    const Instance = new Vue({
        ...
        render () {
            return h => h(ImagePreview, Object.assign({}, _props, {
                ...
            }));
        },
       ...
        created () {
            _instance = this.$el;
        }
    });

    ...
    Instance.$mount(container);
    ...
};

export default ImagePreview;

迁移一部分工具代码

以下的方法需要自己把源码(在utils中)拷过来,然后导入即可

  • isClient;搬用人家的方法
  • downloadFile; 搬用人家的方法
  • keyCode

// keycode代码,其他不用的就删掉了

javascript 复制代码
const KeyCode = {
    /**
     * ESC
     */
    ESC: 27,
    /**
     * SPACE
     */
    SPACE: 32,
    /**
     * LEFT
     */
    LEFT: 37, // also NUM_WEST
    /**
     * UP
     */
    UP: 38, // also NUM_NORTH
    /**
     * RIGHT
     */
    RIGHT: 39, // also NUM_EAST
    /**
     * DOWN
     */
    DOWN: 40, // also NUM_SOUTH
};

export default KeyCode;

修改导入

javascript 复制代码
// 下面导入可以直接用
import { on, off } from "view-design/src/utils/dom";
import throttle from "lodash.throttle";
// 按照上面的迁移哦
import { isClient, downloadFile } from "../../utils";
// 按照上面的迁移哦
import KeyCode from "../../utils/keyCode";
import { transferIndex, transferIncrease } from "view-design/src/utils/transfer-queue";
import TransferDom from 'view-design/src/directives/transfer-dom';

特殊说明:image-preview.vue

teleport组件是vue3的内置组件,这里起初我用了适合vue2的自定义teleport的组件(感兴趣的可以看看vue2-teleport库 的实现),但是发现view-design中有自定义指令TransferDom实现了同样的功能,所以就直接用自带的啦

javascript 复制代码
 <teleport to="body" :disabled="!transfer">
   ...
 </teleport>

更改为:

javascript 复制代码
<div v-transfer-dom :data-transfer="transfer">
  ...
</div>

写到最后

使用方式同view-ui-plus的Image/ImagePreview组件, 直接查看使用即可。

如果帮助到大家,帮忙点个免费的赞就行啦,让博主知道帮到了大家开心开心!!!

相关推荐
小光学长30 分钟前
基于Vue的保护动物信息管理系统r7zl6b88 (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
麦麦大数据2 小时前
F029 vue游戏推荐大数据可视化系统vue+flask+mysql|steam游戏平台可视化
vue.js·游戏·信息可视化·flask·推荐算法·游戏推荐
paopaokaka_luck3 小时前
基于SpringBoot+Vue的社区诊所管理系统(AI问答、webSocket实时聊天、Echarts图形化分析)
vue.js·人工智能·spring boot·后端·websocket
余道各努力,千里自同风3 小时前
el-input 输入框宽度自适应宽度
javascript·vue.js·elementui
Southern Wind4 小时前
Vue 3 多实例 + 缓存复用:理念及实践
前端·javascript·vue.js·缓存·html
一大树4 小时前
Vue3优化指南:少写代码,多提性能
vue.js
90后的晨仔4 小时前
Webpack完全指南:从零到一彻底掌握前端构建工具
前端·vue.js
90后的晨仔4 小时前
Vue3项目全面部署指南:从构建到上线
前端·vue.js
重生之我要当java大帝4 小时前
java微服务-尚医通-数据字典-5
vue.js·微服务·云原生·架构
Shi_haoliu5 小时前
Vue2 + Office Add-in关于用vue项目于加载项控制excel单元格内容(Demo版)
前端·javascript·vue.js·node.js·html·excel·office