【技术需求】元素升级 2.x #136

简介: 【技术需求】元素升级 2.x #136

背景


link-center项目的技术栈比较老旧,未来可以预测到许多业务需要在最新的 的基础上进行开发,靠原生 手写实现封装花费时间较多且稳定性不是很好,比如实现一个日期组件ElementVue

  1. 如今大多数开源的 应用,如 、 等都依赖于 以上的版本, 以下版本显然是没有办法兼容这些组件的Vuevue-easytable vue-treeselectVue 2.xVue 2.x
  2. 目前使用的版本也缺乏一些新的特性,升级之后,也是为了更好的适应

目标


  1. 从 平稳过渡到 以上1.4.13Element 2.x
  2. 兼容现有样式和组件

升级


移除 中的 版本package.jsonelement-ui

// package.json
element-ui: '2.15.7'

安装最新版本

$ npm install element-ui @2.15.7 -S


改动点


引入位置替换

  • 样式名称替换
    在 中修改新增的 主题,将 替换为src/index.jstheme-chalkimport 'element-ui/lib/theme-default/index.css import 'element-ui/lib/theme-chalk/index.css
  • .babelrc
    把 替换为theme-defaulttheme-chalk


引入优先级问题

有的组件样式需要进行定制覆盖,于是就在组件里面用 进行了同类名的样式替换,这样在开发环境下效果是符合预期的,但是打包编译后,优先级就变了。需要在 修改引入文件路径顺序的问题css scopedsrc/index.js

修改前:

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

修改后:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App.vue'
Vue.use(ElementUI)


页面全局报错修正

  • 编译报错,Vue packages version mismatch
    这个错误是因为在 版本升级过后,对应的 版本 及 的版本未升级的原因element uiVuevue-template-compiler
$ npm install vue-template-compile @2.6.14 -S
  • 界面渲染失败,控制台报错: 属性不存在_v
    这里需要注意 最低兼容 ,因此升级 Vue 到 2.5 以上Element 2.xVue 2.5.x
$ npm uninstall vue
$ npm install vue@2.6.12
  • 编译报错,TypeError: VueLoaderPlugin is not a constructor
// webpack.config.js
const { VueLoaderPlugin } = require('vue-loader')
module.exports = {
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            }
        ]
    },
    plugins: [
        // 请确保引入这个插件!
        new VueLoaderPlugin()
    ]
}

vue-loader也需要升级,以便支持Element 2.x


组件属性变更

  • 项目中的图标图标:
    升级后很多 名称发生了变化导致无法显示,需要去文档查看最新的图标名称icon
  • 按钮:
    为了方便使用第三方图标, 的 属性现在需要传入完整的图标类名Buttonicon
  • 复选框:
    Checkbox的 事件中,参数由 变为了changeeventvalue
  • 输入:
  1. 移除了 的 属性。现在通过 或者 具名插槽来加入尾部图标inputiconsuffix-iconsuffix
  2. 移除 和 事件,现在如果需要为输入框中的图标添加点击事件,请以具名 的方式添加图标on-icon-clickclickslot
  3. change事件现在仅在输入框失去焦点或用户按下回车时触发,与原生 元素一致。如果需要实时响应用户的输入,可以使用 事件inputinput
  4. 盒模型从 修改为blockinline-block
  5. Input的 属性被传递到了最底层的 元素,需要关注有 的idinputidel-input
  • 选择:
  1. 盒模型从 修改为blockinline-block
  2. Select,值为对象类型时,需要提供一个 作为唯一性标识value-key
  3. Select,过滤情况下, 为选中选项的placeholderlabel
  • 开关:
  1. 由于 属性在 JSX 中会被识别为事件,导致 所有 属性在 JSX 中无法正常工作,所以 属性更名为 ,对应地, 属性更名为 。受到影响的属性有:on-*Switchon-*on-*active-off-inactive-*on-icon-class、off-icon-class、on-text、off-text、on-color、off-color、on-value、off-value
  2. active-text和 属性不再有默认值inactive-text
  • 时间选择器:
    点击清空按钮时, 中的参数由 变为change’’null
  • 日期选取器:
    timepicker
  • 日期时间选取器:
    timepicker
  • 上传:
    Upload重构升级, 属性更名为 , 属性更名为 , 属性被移除default-file-listfile-listshow-upload-listshow-file-listthumbnail-mode
  • 表单组件:
  1. Form validateField()方法回调的参数更新
  2. Form移除输入框的成功状态
  • Table组件:
  1. 移除通过 自定义列模板的功能inline-template
  2. sort-method现在和 保持一致的逻辑,要求返回一个数字Array.sort
  3. 将 移至 元素以外,以保证其只被渲染一次append slottbody
  4. expand事件更名为 ,以保证 的命名一致性expand-changeAPI
  5. row-class-name和 的函数参数改为对象,以保证 的一致性row-styleAPI
  • 标记:
    type属性现在支持 四个值success、info、warning 和 danger
  • 分页:
    表单组件的 事件和 的 事件现在仅响应用户交互changePaginationcurrent-change
  • 装载:
    非全屏 遮罩层的 修改为 2000;
    全屏 遮罩层的 值会随页面上的弹出组件动态更新Loadingz-indexLoadingz-index
  • 制表符:
  1. 盒模型从 修改为 , 移除 属性inline-blockblockTab-Panelabel-content
  2. Tabs现在内部不再维护 实例,需要在外部通过相关事件去处理tab
  • 下拉菜单:
  1. menu-align属性变更为 ,增加更多方位属性placement
  2. show-timeout和 属性现在仅在 为 时生效hide-timeouttriggerhover
  • 对话:
  1. Dialog的遮罩层现在默认插入至 元素上body
  2. 移除 属性,现在 的尺寸由 和 控制sizeDialogwidthfullscreen
  3. 移除通过 控制 显示和隐藏的功能v-modelDialog
  • 工具提示:
  1. 重构 ,不再生成额外的 标签,确保被 包裹的组件的结构不变TooltipHTMLtooltip
  2. el-tooltip标签中,子元素如果有 ,则需要为 也加上v-if el-tooltipv-if


非兼容性更新带来的警告

虽然项目能跑起来了,但是控制台还会有很多警告,一部分是来自 本身的警告,还有一些是 的非兼容属性或者即将废弃的属性所带来的警告,需要我们对这些警告进行修改。常见的有:VueElement

  • v-for循环渲染组件时,必须为组件绑定 值key
  • v-for绑定的 值中,存在同样的 值keykey
  • Element中的废弃属性带来的警告,比如: 中的 改为inputiconsuffix-icon


测试事项


  • 建议把测试时间尽量拉长一点,这样子才能发现项目中潜在的问题
  • 全量测试
目录
相关文章
|
数据采集 存储 监控
大数据的数据来源 - 数据采集的方式(数据接入的方式)
大数据处理关键技术一般包括:大数据采集、大数据预处理、大数据存储及管理、大数据分析及挖掘、大数据展现和应用(大数据检索、大数据可视化、大数据应用、大数据安全等)。下面主要介绍下大数据采集
6954 0
|
微服务
微服务迁移模式之Martin Flower绞杀者模式
绞杀者模式(Strangler Pattern)是一种非常流行的从单体系统向微服务迁移的策略,其主张通过用新服务替换特定功能来将单体系统逐步转换为微服务,一旦新服务已经能够代替原有旧有功能,就将原有功能组件绞杀(即彻底停用)。
3099 1
微服务迁移模式之Martin Flower绞杀者模式
|
负载均衡 前端开发 应用服务中间件
【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包
【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包
1220 0
|
Linux 编译器 数据处理
探索Linux中的`ld`命令:链接器的奥秘
`ld`是Linux中的链接器,将编译后的目标文件链接成可执行或共享库。作为GNU Binutils的一部分,它处理符号引用、重定位,支持多种文件格式和库类型。常用参数包括`-o`指定输出文件,`-l`链接库,`-L`指定搜索路径。编译器驱动程序常用于简化链接过程。理解符号解析、选择静态/动态链接及管理库版本是使用`ld`的关键。使用`--verbose`调试链接问题,并考虑优化选项。
|
11月前
|
机器学习/深度学习 资源调度 数据可视化
YOLOv11改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示
YOLOv11改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示
552 1
YOLOv11改进策略【注意力机制篇】| 引入Shuffle Attention注意力模块,增强特征图的语义表示
|
jenkins 测试技术 开发工具
协同开发的艺术:Git 在团队项目中的高效应用
【8月更文第16天】在现代软件开发中,团队成员之间的高效协作是至关重要的。Git 作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码的变化和协作。本文将介绍如何利用 Git 来优化团队的工作流程,并提供实际操作的代码示例。
418 1
|
消息中间件 运维 数据管理
Kafka 如何基于 KRaft 实现集群最终一致性协调
Kafka 3.3.1 引入了 KRaft 元数据管理组件,替代 Zookeeper,以简化集群一致性维护,支持更大规模集群并减轻运维复杂性。在 Zookeeper 模式下,需同时运维 ZK 和 Broker,而 KRaft 模式仅需 3 个节点即可构成最小生产集群,且通信协调基于 Raft 协议,增强了一致性。KRaft 模式中,Controller 使用单线程处理请求,通过 KRaft 保持内存状态与多节点一致性。此外,Broker 根据 KRaft 记录更新元数据,实现声明式管理,提高集群协调效率。KRaft 的引入是集群协调机制的演进,采用事件驱动模型实现元数据的一致性。
902 1
Kafka 如何基于 KRaft 实现集群最终一致性协调
|
前端开发 JavaScript 测试技术
"React新手入门的神奇之处:如何用React构建第一个应用,让你的项目一鸣惊人?"
【8月更文挑战第31天】本文详细介绍了如何从头开始构建首个React应用。React作为当今Web开发中备受欢迎的前端框架,采用组件化设计实现界面构建,便于维护与扩展。文章首先解释了React的基础概念,接着演示了使用Create React App搭建项目的步骤,展示了基础组件编写方法及React Router的简单运用,并分享了一些实用的最佳实践建议,帮助读者快速上手React开发。
278 0
|
NoSQL Linux Shell
【进程概念】进程状态以及僵尸进程(结合代码)
【进程概念】进程状态以及僵尸进程(结合代码)