vue2项目迁移到vue3中的改动——基础积累

news2024/10/5 12:52:11

最近在跟着大神学习vue3的内容,发现之前vue2写的代码可以直接照搬到vue3中,但是有一些需要改动的内容,下面做一下记录。
在这里插入图片描述

1.定义对象时,需要指定每个属性值

例如:listQuery:{} 如果使用:listQuery.Filter 会报错提示,listQuery对象上没有Filter参数。因此定义listQuery:{Filter:null};

2.监听input组件的回车事件

vue2的写法:@keyup.enter.native
vue3的写法:@keyup.enter
报错信息:
[vue/no-deprecated-v-on-native-modifier] '.native' modifier on 'v-on' directive is deprecated.

3.input组件中的图标

vue2的写法:<a-icon slot="prefix" type="search" />
vue3的写法:

<template #prefix>
  <search-outlined />
</template>

4.button组件中的图标

vue2的版本

<a-button type="primary" icon="search" @click="handleFilter">查询</a-button>

vue3的版本:

<a-button type="primary" @click="handleFilter">
  <template #icon>
    <search-outlined />
  </template>
  查询</a-button>

5.alert组件的使用

<a-alert type="warning" style="margin-top: 5px" showIcon>
  <template #message>
    <div style="display: flex; justify-content: space-between; align-items: center">
      <span
        >已选择<b style="margin:0 5px;">{{ checkedIds.length }}</b
        ></span
      >
      <span @click="checkedIds = []" style="cursor: pointer;">清空</span>
    </div>
  </template>
</a-alert>

6.插槽的使用

使用插槽需要用`template`标签,然后内容为`#插槽名称`的方式来处理

例如上面的:

<template #prefix>
  <search-outlined />
</template>
<template #icon>
  <search-outlined />
</template>

7.table组件的部分使用——后续更新

7.1 columns列数据的渲染

<template #bodyCell="{ column, record }">
  <div v-if="column.dataIndex == 'action'">
    //需要通过 #bodyCell的方式来处理,然后通过v-if="column.dataIndex==xx"的方式来渲染不同的列
  </div>
</template>

7.2 a-dropdown组件的使用

<a-dropdown>
 <a class="ant-dropdown-link" href="javascript:;">
    操作
    <a-icon type="down" />
  </a>
  <template #overlay>
    <a-menu>
      <a-menu-item>
        <a-popconfirm title="确定要删除吗?" @confirm="handleDelRole(record.id)">
          <a href="javascript:;">删除</a>
        </a-popconfirm>
      </a-menu-item>
       <a-menu-item>
        <a href="javascript:;" @click="handleAdd(record)">添加</a>
      </a-menu-item>
    </a-menu>
  </template>
</a-dropdown>

7.3 如果在7.2中的代码中添加事件时,不能直接使用$refs.xxx.open(record)的方式来处理

例如上面中的@click="handleAdd(record)",不能使用@click="$refs.xxx.open(record)",会报错提示xxx为undefined,且无open的方法function

7.4 表格的选择row-selection

vue3的表格选择:

<a-table
 style="margin-top: 5px"
  rowKey="id"
  :columns="memberColumns"
  :dataSource="data"
  @change="handleTableChange"
  :pagination="pagination"
  :customRow="onCustomRow"
  :row-selection="{ selectedRowKeys: checkedIds, onChange: onSelectedRowChange }"
>
</a-table>

对应的script

onSelectedRowChange(selectedRowKeys) {
  this.checkedIds = selectedRowKeys;
},

点击行方法vue2vue3的区别:
vue2的写法:

onCustomRow(record) {
  return {
    on: {
      click: (event) => {
      }, // 点击行
    },
  };
},

vue3的写法:

onCustomRow(record) {
  return {
    onclick: () => {
      ///
    },
  };
},

8.form组件

8.1 formform-model合并了,目前只有form

<a-form :model="form" :rules="rules" @finish="handleOk" :label-col="labelCol" :wrapper-col="wrapperCol">
  <a-form-item label="名称" ref="displayName" name="displayName">
    <a-input v-model:value="form.displayName" placeholder="请输入机构名称" />
  </a-form-item>
  <a-form-item style="text-align: right" :label-col="{ span: 0 }" :wrapper-col="{ span: 24 }">
    <a-space>
      <a-button type="primary" ghost @click="handleCancel">取消</a-button>
      <a-button type="primary" html-type="submit">确定</a-button>
    </a-space>
  </a-form-item>
</a-form>

8.2 触发校验的只能是@finish方法,且需要html-type="submit"的按钮才能触发

8.3 prop改为name,否则无法触发rules

8.4 v-model统一改为v-model:value

8.5 finish方法

this.confirmLoading = true;
//调用自己的方法:
createUpdate(this.form)
.then(() => {
  this.visible = false;
  this.$message.success('操作成功');
  this.$emit('ok');//子组件触发父组件的ok方法。
})
.finally(() => {
  this.confirmLoading = false;
});

8.5 清空校验:

vue2的用法:使用clearValidate方法,但是vue3使用这个,则需要在setup中,而且我没有测试成功,因为我这边地方是弹窗,因此我通过设置a-modal中的destroyOnClosefalse,也就是要强制销毁组件,则再次打开弹窗时,则不会有上一次的规则校验了。
在这里插入图片描述

9.modal组件的使用

我想要去掉a-modalfooter部分:
在这里插入图片描述
百度了很久,才发现一个可用的办法:
在此处附上大神的链接:vue3.0修改antdesginVue中对话框组件(<a-modal>)的头部样式http://t.csdn.cn/65e7L

步骤如下:

9.1 在外层套一个div,添加一个class属性,一个ref属性

9.2 在a-modal中添加 :getContainer="() => $refs.ruleFormRef"

9.3 去掉底部的样式,则先去掉按钮

<template #footer>
  <span></span>
</template>

9.4 css样式部分:

<style scoped>
  .tenantFormModalCls :deep.ant-modal-footer {
    padding: 0 !important;
  }
</style>

9.5 完整代码如下:

<div ref="ruleFormRef" class="tenantFormModalCls">
  <a-modal
    :title="form.id ? '编辑' : '添加根机构'"
    :width="640"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @cancel="handleCancel"
    :destroyOnClose="true"
    :getContainer="() => $refs.ruleFormRef"
  >
    <a-spin :spinning="confirmLoading">
      <a-form :model="form" :rules="rules" @finish="handleOk" :label-col="labelCol" :wrapper-col="wrapperCol">
        <a-form-item label="名称" ref="displayName" name="displayName">
          <a-input v-model:value="form.displayName" placeholder="请输入机构名称" />
        </a-form-item>
        <a-form-item style="text-align: right" :label-col="{ span: 0 }" :wrapper-col="{ span: 24 }">
          <a-space>
            <a-button type="primary" ghost @click="handleCancel">取消</a-button>
            <a-button type="primary" html-type="submit">确定</a-button>
          </a-space>
        </a-form-item>
      </a-form>
    </a-spin>
    <template #footer>
      <span></span>
    </template>
  </a-modal>
</div>

先这些吧,后续会持续更新!!!
多多积累,多多收获!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+elementplus后台管理系统,实现侧边栏菜单显示到主内容区域

目录 1 创建页面2 设置路由3 修改首页4 首页的完整代码总结 我们已经使用vue3和elmentplus初步搭建了首页&#xff0c;上一篇中有个问题没解决&#xff0c;就是在侧边栏导航功能里&#xff0c;如果点击菜单希望是在首页打开页面而不是跳转到新页面。以下是我们希望实现的效果 这…

B/B+树算法

B树 基本概述 B树又称多路平衡搜索树。一棵m阶B树&#xff0c;要么是空树&#xff0c;要么满足以下特性&#xff1a; 每个节点最多有m棵子树根节点至少有两棵子树内部节点&#xff08;除根和叶子节点以外的节点&#xff09;至少有⌈m/2⌉棵子树关键字个数比子树个数少1终端节…

字符函数和字符串函数解析及模拟实现

字符函数和字符串函数解析及模拟实现 1. 求字符串长的函数1.1[strlen](https://legacy.cplusplus.com/reference/cstring/strlen/?kwstrlen)1.2 strlen()模拟实现 2. 长度不受限制的字符串函数2.1[strcpy](https://legacy.cplusplus.com/reference/cstring/strcpy/?kwstrcpy)…

数据结构与算法——什么是队列(队列存储结构)

队列&#xff0c;和栈一样&#xff0c;也是一种对数据的"存"和"取"有严格要求的线性存储结构。 与栈结构不同的是&#xff0c;队列的两端都"开口"&#xff0c;要求数据只能从一端进&#xff0c;从另一端出&#xff0c;如下图所示&#xff1a; 通…

vue中使用jsMind生成思维导图 截图功能踩坑

npm i jsmind先安装&#xff0c;再引入 import jsmind/style/jsmind.css import jsMind from jsmind/js/jsmind.js require(jsmind/js/jsmind.draggable.js) require(jsmind/js/jsmind.screenshot.js)正常引入是这样的&#xff0c;然后渲染也没问题 <template><div …

vue 快速自定义分页el-pagination

vue 快速自定义分页el-pagination template <div style"text-align: center"><el-paginationbackground:current-page"pageObj.currentPage":page-size"pageObj.page":page-sizes"pageObj.pageSize"layout"total,prev,…

uni-app中的uni.requireNativePlugin()

这个方法是用来引入原生插件的方法&#xff0c;自 HBuilderX 1.4 版本起&#xff0c;uni-app 支持引入原生插件&#xff0c;使用方式如下&#xff1a; const PluginName uni.requireNativePlugin(PluginName); // PluginName 为原生插件名称 引入插件的类型有三种&#xff1…

(二)RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】 文章目录 RabbitMQ【安装Erlang、安装RabbitMQ 、账户管理、管控台、Docker安装 】**安装Erlang**安装RabbitMQ账户管理管控台Docker安装RabbitM…

添加USB转串口设备驱动-迅为i.MX8M开发板

对于通过 USB 接口访问的模块&#xff0c;在 Linux 内核中集成 USB 驱动程序。我们需要配置内核选中支持 GSM 和 CDMA 模块的 USB 转串口驱动 > Device Drivers -> USB support (USB_SUPPORT [y]) -> USB Serial Converter support (USB_SERIAL [y]) -> USB driver…

Chrome 115 有哪些值得关注的新特性?

今天带大家一起来了解一下 Chrome 115 值得关注的新特性。 滚动动画 用滚动驱动的动画是网站上非常常见的用户体验模式&#xff0c;比如当页面向前或向后滚动时&#xff0c;对应的动画也会向前或向后移动。 比如下面图中这种比较常见的&#xff0c;页面顶部的进度条随着滚动…

Visual Studio 2022 从下载安装到如何使用的全面讲解 (图文详解)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; Visual Studio 2022 的介绍&#x1f4ad; Visual Studio 2022 的下载⌨️ 安装…

SPECjvm2008_1_01 openjdk8 x86_64 ARM64 运行时长、成绩 Run is valid, but not compliant

i5-9600k 架构&#xff1a; x86_64CPU 运行模式&#xff1a; 32-bit, 64-bitAddress sizes: 39 bits physical, 48 bits virtual字节序&#xff1a; Little Endian CPU: 6在线 CPU 列表&#xff1a; …

逻辑分析仪分析NEC协议

这里主要学习使用逻辑分析仪&#xff0c;记录一下。 这位兄弟讲得很清楚&#xff1a; https://blog.csdn.net/u013606261/article/details/112977378 这张图也不错&#xff0c;拿来用 这是淘宝上20多块钱的逻辑分析仪 录下的&#xff1a; HS0038B 这个红外一体化接收头&…

工业智能网关实现PLC控制柜实时监测,让污水泵站管理更加方便

随着工业经济与技术的不断发展&#xff0c;自动化控制技术在更多领域得到应用&#xff0c;在农村污水中&#xff0c;污水泵站作为重要的基础设施&#xff0c;其自动化程度直接影响到系统的运行效率&#xff0c;监控能力则影响到系统的运维质量。可编程逻辑控制器(PLC)作为一种实…

GB28181设备接入侧如何支持H.265?

技术背景 一直以来&#xff0c;GB28181-2022之前的规范版本让人诟病的一点&#xff1a;没有明确针对H.265的说明&#xff0c;特别是监控摄像机&#xff0c;H.265已然成为标配&#xff0c;GB/T28181-2022规范&#xff0c;终于针对H.265做了明确的说明&#xff0c;让我们来一起解…

MPAS模式教程

详情点击链接&#xff1a;最新MPAS跨尺度、可变分辨率模式应用及典型案例分析 前言 跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff…

Opencv-C++笔记 (13) : opencv-图像卷积一(均值、中值、高斯、双边滤波)与 边缘处理

文章目录 一、概述图像滤波1.1、均值滤波1.2中值滤波1.3、高斯滤波1.4、双边滤波1.5、方框滤波 二、自定义掩码三、边缘处理四、Sobel算子五、Scharr算子六、拉普拉斯算子十、Canny算法 一、概述图像滤波 头文件 quick_opencv.h&#xff1a;声明类与公共函数 #pragma once #i…

深入理解线程池

一、线程池 1.1、线程池的优势 降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的损耗 提高响应速度 当任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行 提高线程的可管理性 线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅…

【雕爷学编程】Arduino动手做(82)---Mini MP3 Player播放器模块2

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比

day02 day02KeepAlived高可用集群配置高可用的web集群监控本机80端口&#xff0c;实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS&#xff08;Linux Virtual Server&#xff09;NginxHAProxy KeepAlive…