vue2项目升级到vue3经历分享4

news/2024/5/20 14:39:02

后端重构,如果接口做好抽象封装,只需要考虑jar之间的兼容性问题,jdk版本不变,基本不用做太大的调整,但是前端就不一样,除了vue框架本身,css的调整,改起来更是让人头疼。前面写了vue2项目升级到vue3经历分享1,vue2项目升级到vue3经历分享2,vue2项目升级到vue3经历分享3,因为没有改造完,于是又写了一篇。还有7天时间,希望能顺利推进。
1 el-table-column外层不能加span
很奇怪,为什么只有两列,其他的不见。
1
检查代码,第一个不规范的地方,为何el-table-column外层多了一个<span>,这个再新框架里面直接就显示不了,更为严谨。
1
去掉之后,列出来了,说明一个问题el-table-columnel-table中很重要,列存在才可以显示。
1
element-ui中这么写可以,但是element-plus中,这种外面加<span>就不规范了。
1
一般情况下vue2使用Element UI这个组件库,表格组件的插槽的话一般都是使用v-slot,而vue3使用Element Plus组件库,表格组件中插槽一般为#default,不过不改,也能运行。调整后,问题解决。
1

2 $event.target使用问题
下面的代码,运行后提示 TypeError: Cannot read properties of undefined (reading 'target')

<el-table-column prop="remark" label="备注" show-overflow-tooltip min-width="120"><template #default="scope"><span v-show="!scope.row.isEditCell" style="cursor:pointer">{{scope.row.remark}}</span><el-input v-show="scope.row.isEditCell" v-model="scope.row.remark" @blur="cellBlur(scope.row,scope.column)"  @focus="cellFocus(scope.row)" :ref="'remark'+scope.row.id" @keyup.enter.native="$event.target.blur"></el-input></template></el-table-column>

根据文心一言的指导,调整后代码如下,如此界面可以出来了。

<el-table-column prop="remark" label="备注" show-overflow-tooltip min-width="120"><template #default="scope"><span v-show="!scope.row.isEditCell" style="cursor:pointer">{{scope.row.remark}}</span><el-input v-show="scope.row.isEditCell" v-model="scope.row.remark" @blur="cellBlur(scope.row,scope.column)" @focus="cellFocus(scope.row)" :ref="el => { if (el) scope.remarkInput = el; }" @keyup.enter.native="finishEdit(scope.row)"></el-input></template></el-table-column>
finishEdit(row){row.isEditCell = false;},

3 this.$set is not a function

触发cellClick,这里提示this.$set不是跟函数,vue3为什么舍弃了this.$set

1
由于 Vue 3 使用 Proxy 使其数据属性自动成为响应式的,所以可以直接修改对象属性,而无需使用 $set。直接赋值即可。
1
3 TypeError: Cannot read properties of undefined (reading ‘querySelector’)
下面可以看到项目中前端工程师设计了一个select组件,里面直接操作了dom,这个却是很忌讳,为啥,看看现在的我就知道了,升级改造,非常麻烦,因为el-select随便一改造,项目肯定需要花费成本去修复这个问题。然成本从而而来?除非是想防御式编程。但问题是高级工程师随着年龄增长,边界效应递减,低级工程师跳槽涨工资,剩下就是丢给高级工程师的烂摊子,最终承受这些憋屈的就是这些高级工程师。这个也是为什么有些公司招所谓架构师或者技术经理,实际就是去救火的原因。
1
看之前工程运行的效果,实际就是一个默认全选的select,然后封装了一个控件,何必这么麻烦呢。
1
基于element-plus原生控件改造,很难,待我写一个
element-plus升级到2.4.3,提示下面的错误

1:26:55 [vite] Internal server error: No known conditions for "./lib/locale/lang/zh-cn" entry in "element-plus" package                                   11:26:55  Plugin: vite:import-analysisFile: E:/workspace/vuework/acc3/src/App.vue

路径修正为import zhCn from 'element-plus/es/locale/lang/zh-cn',问题处理。之所以升级element-plus,是因为el-select2.3.0中有max-collapse-tags,这个也就是之前为什么有工程师会写自定义select组件的原因,而2.4.0可以加水印,2.4.3可以在select上下方便的加东西,这个版本差不多就够了

<template><el-selectv-model="inputValue"multipleclearablecollapse-tags:max-collapse-tags="2"style="width: 100%"><template #header><el-checkboxv-model="checkAll":indeterminate="indeterminate"@change="handleCheckAll">全选</el-checkbox></template><el-optionv-for="(item,index) in options":key="index":label="item.name":value="item.id"/></el-select>
</template>
<script lang="ts" setup>
import { ref, watch, getCurrentInstance } from "vue";
import type { CheckboxValueType } from 'element-plus'
const { proxy }: any = getCurrentInstance();
defineOptions({name: "multiSelect"  
})
// 属性
const emits = defineEmits(['update:modelValue'])
const props = defineProps({modelValue:{type:String,},options:{type:Array,default:()=>[]},defaultProps:{type:Object,default:()=> ({label:'name',value:'id'})}
})
// 参数
const checkAll = ref(false)
const indeterminate = ref(false)
const inputValue = ref<CheckboxValueType[]>([])
// 方法
const handleCheckAll = (val) => {indeterminate.value = falsedebuggerif (val) {inputValue.value = props.options.map((_) => _.id)} else {inputValue.value = []}
}
watch(()=>inputValue,(val)=>{// 处理自动勾选debuggerif (val.value.length === 0){checkAll.value = false    indeterminate.value = false } else if (val.value.length === props.options.length) {checkAll.value = true    indeterminate.value = false } else{indeterminate.value = true} // 处理表单提交if (!proxy.$_.isEmpty(val)){emits('update:modelValue',val.value.join(','))} else{emits('update:modelValue','')}
},{immediate:true,deep:true})</script>
<style>
</style>

控件使用如下,如此简约易懂

<multi-select :options="expenseList" v-model="form.incomeExpenseIdList" :teleported="false" placeholder="支持多选收支类别"></multi-select>

效果如下:
1
4 表单查询数据错乱的问题
这个问题更加隐蔽,甚至有些莫名奇妙,this.form跟当前页面的完全不是一个,怎么会传过来的呢?

1
查询关键字,可以搜索到这一款来自另外一个页面,那么为什么不是同一个页面会出现form错乱的问题呢?
1
应该是出现在多个组件使用了,同一个name,当在递归组件的问题会产生混淆的问题。
1
5 表头th标签不见了
为什么会出现下面的问题
1
查看代码,还是挺有想象力的
1
但显示出来却少了东西
1
正常情况应该是下面的
1
处理方案居然是,将th标签调整一下排版,问题解决,如此问题应该出在vite编译器
2

待补充。。。


http://www.mrgr.cn/p/27416402

相关文章

8.2版本Web端移动开发调试强制跳转新移动框架

解决方案: Common.config文件中增加配置项 <add key="MobileLoginType" value="1" /> 如下图其他注意事项: 没有配置MobileLoginType属性 或 MobileLoginType = "" 或 MobileLoginType = 2 都会执行重定向 MobileLoginType = 3 系…

SQL 基础 | UNION 用法介绍

在SQL中&#xff0c;UNION操作符用于合并两个或多个SELECT语句的结果集&#xff0c;形成一个新的结果集。 使用UNION时&#xff0c;合并的结果集列数必须相同&#xff0c;并且列的数据类型也需要兼容。 默认情况下&#xff0c;UNION会去除重复的行&#xff0c;只保留唯一的行。…

cordova build android 下载gradle太慢

一、 在使用cordova run android / cordova build android 的时候 gradle在线下载 对于国内的链接地址下载太慢。 等待了很长时间之后还会报错。 默认第一次编译在线下载 gradle-7.6.1-all.zip 然后解压缩到 C:\Users\Administrator\.gradle 文件夹中,下载慢导致失败。 二…

【软件工程】需求分析

目录 前言需求分析需求获取UML概述用例图用例图的组成用例图中的符号和含义包含的两种使用场景 用例图补充&#xff1a;“系统”用例模型建模确定系统参与者确定系统用例 用例文档用例文档组成部分 活动图组成元素初始节点和终点活动节点转换决策与分支、合并分岔与汇合 类图类…

Java面试八股文(SpringCloud篇)

****************************************************

Error: Cannot find module ‘D:\SoftSetupLoaction\nodejs\node_global\node_modules\npm\bin\npm-cli.js‘

Error: Cannot find module ‘D:\SoftSetupLoaction\nodejs\node_global\node_modules\npm\bin\npm-cli.js‘ 出现原因: 重新安装可装了nodejs和npm 网上查了很多方法,都建议重装,但是都没有效果(因为我就是重装之后出现的问题) 按照错误提示node_global找不到npm-cli.js,个人…

初探pinctrl子系统和GPIO子系统

前言: 在前面的led驱动程序和按键驱动程序中,无论是最传统的方法,还是总线设备驱动模型,还是基于设备树的总线设备驱动模型,都是直接操作寄存器的方法。驱动开发的本质确实是操作寄存器,但是一个芯片有几百个引脚,只是操作少数的几个引脚还好,如果是大量的引脚,比如LC…

前端开发攻略---使用Sass调整颜色亮度,实现Element组件库同款按钮

目录 1、演示 2、实现原理 3、实现代码 1、演示 2、实现原理 改变颜色亮度的原理是通过调整颜色的 RGB 值中的亮度部分来实现的。在 Sass 中&#xff0c;可以使用颜色函数来操作颜色的 RGB 值&#xff0c;从而实现亮度的调整。 具体来说&#xff0c;亮度调整函数通常会改变颜…

PVE新增硬盘并扩容给 local分区

PVE安装在120G的固态硬盘,现在加了一块1T的机械硬盘作为虚拟机系统用,需要把磁盘扩容给 local分区 1、ssh连上pve,使用 lsblk 查看硬盘驱动器路径,我这里新加的硬盘是 sda,硬盘还未进行分区 2、fdisk /dev/sda,对硬盘进行分区操作,注意你自己的硬盘名称,千万小心不要搞…

Windows内核开发:如何使用STL

前言 大家都知道应用层c的STL非常强大&#xff0c;非常好用&#xff0c;但是在内核下就没法用了。针对这个问题&#xff0c;经过我不懈的寻找&#xff0c;终于找到了解决内核无法使用STL的方法。 使用new/delete关键字 先说一下常用关键字如何在内核中使用。其实只需要在一个全…

实验1-波士顿房价预测部分报错解决方法

运行sgd = SGDRegressor()sgd.fit(x_train, y_train)print("r2 score of Linear regression is",r2_score(y_test,sgd.predict(x_test)))时出现 DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y t…

用栈实现队列——leetcode刷题

题目要求我们只用栈的基本操作 push to top 入栈&#xff0c;peek from top 返回栈顶元素&#xff0c;pop from top 移除并返回栈顶元素&#xff0c;size 栈的大小&#xff0c;is_empty 判断栈是否为空&#xff0c;这几个函数来实现队列&#xff0c;也就是说&#xff0c;我们在…

【Java】初识网络编程

文章目录 前言✍一、互联网的发展1.独立模式2.网络的出现局域网LAN广域网WAN ✍二、网络编程概述✍三、网络编程中的术语介绍IP地址端口号协议OSI七层模型TCP\IP四层模型 ✍四、协议的层级之间是如何配合工作的 前言 在本文中&#xff0c;会对网络编程的一些术语进行解释&#…

《最新出炉》系列入门篇-Python+Playwright自动化测试-45-鼠标操作-下篇

1.简介 鼠标为我们使用电脑提供了很多方便,我们看到的东西就可以将鼠标移动过去进行点击就可以打开或者访问内容,当页面内容过长时,我们也可以使用鼠标滚轮来实现对整个页面内容的查看,其实playwright也有鼠标操作的方法。上一篇文章中已经讲解过鼠标的部分操作了,今天宏哥…

redux中核心组件有哪些,reducer的作用

在redux中,核心组件包括Action、Reducer、Store和Middleware。 Action是一个普通的JavaScript对象,用于描述发生了什么事件。它必须包含一个type属性,用于标识事件的类型。可以在Action中添加其他自定义的属性来传递数据。 Reducer是一个纯函数,用于根据收到的Action来更新…

学习记录+vcode+GPIO例程+正点原子 DNESP32S3 开发板教程-IDF 版

第一个程序: UART模式和JTAG模式,配置完成不同。配置主要就是.vscode 文件夹中 c_cpp_properties.json,tasks.json,launch.json,settings.json四个文件。 一个想法:备份UART模式和JTAG模式的配置文件,用时直接文件替换。简单粗暴方式是.vscode 文件夹替换。当然每次要选…

chrome extension插件替换网络请求中的useragent

感觉Chrome商店中的插件不能很好的实现自己想要的效果,那么就来自己动手吧。 本文以百度为例: 一般来说网页请求如下: 当前使用的useragent是User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safar…

AB实验相关流程

本篇文章介绍的是一个完整AB测试流程应该怎么走。 AB测试流程有以下几个步骤: 一、选取实验指标 二、建立实验假设 三、选取实验单位 四、确定最小提升预期值 五、计算最小样本量 六、流量分割 七、确定实验时长 八、数据统计 九、得出结论 接下来就详细说明每个步骤。 一、选…

RS232引脚方向及意义与接线参考

RS232引脚方向及定义编号引脚意义方向作为IO使用说明1CD载波检测(Carrier Detect)计算机《调制解调器输入调制解调器通知计算机有载波被侦测到2RXD接收(Receive)计算机《调制解调器 接收数据3TXD发送(Transmit)计算机》调制解调器 发送数据4DTR数据终端设备(DTE)备好(Data Te…