Vue2 项目 迁移到 Vue3 的方法记录 包含element-ui

由于element-ui 未对 Vue3 兼容,导致官方提供的构建版本不能使用
下面手动进行迁移

决定升级前请确保项目所有依赖都有替代方法
Vue特性变更,官网会给出解决方法
特别注意第三方UI相关依赖

vue2 改为 vue3 以及 相应的依赖修改

  1. vue@next , 组件 @vue/compiler-sfc (Vue2:vue-template-compiler)
  2. element-ui 换成 element-plus
  3. vue router 的版本 @next -> 4.x
  4. vuex 版本 @next -> 4.x
  5. @vue/cli-service 升到最新版本

对配置进行修改:

1. Vue相关

main.js

import { createApp } from 'vue' // import Vue from 'vue'

import ElementPlus from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import 'element-plus/theme-chalk/index.css'

import router from './router'
/* Vue2 的创建方式 
new Vue({
    router,
    render: h => h(App)
}).$mount('#app'); */
const app = createApp(App)
app.use(router)
app.use(store)
app.use(ElementPlus, { size: 'default', zIndex: 3000, locale: zhCn })
app.mount('#app')
  • 项目内查找 ’Vue‘ 寻找替换方案
    多数使用app调用
    import { ElMessageBox } from 'element-plus' 代替直接通过 Vue 访问

  • xxx.sync 不再支持, 需要转化为 v-model:xxx

  • vue2.6 以前的 slotslot-scope 改用 v-slot 方式 简写#

  • 移除事件总线 $on、$once、$off、 替代品
    Provide 和 inject 允许一个组件与它的插槽内容进行通信
    vuex

  • 过滤器 (filter) 移除
    可使用计算属性或methods

  • keep-alive 用法

vue2
<transition
  name="move"
  mode="out-in"
>
  <keep-alive :include="tagsList">
   <router-view :key="$route.fullPath"></router-view>
  </keep-alive>
</transition>
vue3
<router-view
  :key="$route.fullPath"
  v-slot="{ Component }"
>
  <transition
    name="move"
    mode="out-in"
  >
    <keep-alive :include="tagsList">
      <component :is="Component" />
    </keep-alive>
  </transition>
</router-view>
  • ::v-deep 弃用 :deep() 代替
    >>> /deep/ 同理
  • $set 和 $delete 被移除
  • $children弃用 通 $refs链访问

更多详细不兼容变更

2. vue-router

/* 
import Vue from 'vue'
import Router from 'vue-router' */
import { createRouter, createWebHashHistory } from 'vue-router'

/* Vue.use(Router) */

export const baseRouters = ···
// path: '*', 不再建议使用 '*' 使用 '/:catchAll(.*)' 替代


/* export default new Router({
 routes: baseRouters
}) */
const router = createRouter({
    history: createWebHashHistory(),
    routes: baseRouters
})

export default router

vue-router 详细变化

3. vuex

import { createStore } from 'vuex'

export default createStore({
  state () {
    return {
      count: 0
    }
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})
// main.js
const app = createApp({ /* 根组件 */ })

// 将 store 实例作为插件安装
app.use(store)

处理 element 两者不兼容的代码

1. el-subMenu --> el-sub-menu
2. .sync
  • el-dialogel-pagination 下 .sync修饰符方式 改为用 v-model (.sync Vue3已移除)

    注: el-dialog 的 visible 直接使用 v-model 控制

3. el-date-picker
  1. picker-options 拆分
    el-date-picker 移除了 picker-options 转而将它们拆分成单个选项进行配置,如 shortcuts
    // shortcuts
    {text: xx, value: function() {}}
    
  2. 移除了 align
  3. el-date-picker value-format
    el-date-picker 属性 value-format 发生变化
占位符输出详情
YY18两位数的年份
YYYY2018四位数的年份
M1-12月份,从 1 开始
MM01-12月份,两位数
MMMJan-Dec缩写的月份名称
MMMMJanuary-December完整的月份名称
D1-31月份里的一天
DD01-31月份里的一天,两位数
d0-6一周中的一天,星期天是 0
ddSu-Sa最简写的星期几
dddSun-Sat简写的星期几
ddddSunday-Saturday星期几
H0-23小时
HH00-23小时,两位数
h1-12小时, 12 小时制
hh01-12小时, 12 小时制, 两位数
m0-59分钟
mm00-59分钟,两位数
s0-59
ss00-59秒 两位数
SSS000-999毫秒 三位数
Z+05:00UTC 的偏移量,±HH:mm
ZZ+0500UTC 的偏移量,±HHmm
AAM PM
aam pm
4. el-tag type
  • el-tag type属性可选值发生变化 success/info/warning/danger

以上仅为我所遇到element不兼容,详细请参见

5. icon 不再直接通过字符串

得引入 @element-plus/icons-vue
再做相应的修改

vue-echarts

确保 echarts 版本 5 以上

// 全局注册组件(也可以使用局部注册)
app.component('v-chart', ECharts) // Vue.component('v-chart', ECharts)
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI是一个基于Vue.js的组件库,它提供了一系列的用户界面组件,使开发人员能够更快速、更高效地构建网页应用程序。Element UI是由饿了么前端团队开发的,它的目标是提供一套优雅、易于使用、高质量的UI组件,以解决前端开发过程中的痛点和问题。 而Vue-demi是一个为Vue 3而构建的TypeScript库,它的目标是提供一种平滑迁移Vue 3的方式。它通过将Vue 3的核心功能封装成了一个使用TypeScript编写的库,使得开发人员可以在不修改现有代码的情况下,逐步将项目升级到Vue 3。Vue-demi允许开发人员在现有的Vue 2项目中,使用Vue 3的新特性和Api,同时还保持了对Vue 2的兼容性。 在使用Element UIVue-demi结合进行开发时,我们可以利用Element UI提供的丰富组件库,快速构建出具有良好用户界面的网页应用程序。而通过Vue-demi,我们可以逐步将现有的Vue 2项目升级到Vue 3,从而享受到Vue 3带来的新特性和优势。使用Element UIVue-demi的组合,能够让开发人员更好地应对项目升级和后续维护工作,提高开发效率和代码质量。 总之,Element UIVue-demi是两个在Vue.js生态系统中具有重要作用的工具。Element UI提供了丰富的UI组件,使开发人员能够快速构建出漂亮、易用的网页应用程序;而Vue-demi则为Vue 3的平滑迁移提供了便利,让开发人员可以逐步升级项目,享受到Vue 3的新特性和Api。使用这两个工具的组合,能够帮助开发人员更高效地进行项目开发和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值