在 Vue.js 中使用 Ant Design 实现表格开关功能:详细教程

news2024/9/24 3:21:35

个人名片
在这里插入图片描述
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?

  • 专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀

目录

      • 在 Vue.js 中使用 Ant Design 实现表格开关功能:详细教程
        • 一、项目背景与需求分析
        • 二、准备工作
        • 三、构建表格组件
          • 1. **构建表格骨架**
          • 2. **添加开关列**
          • 3. **处理开关状态更新**
          • 4. **API 模块实现**
          • 5. **操作列的实现**
        • 四、常见问题与调试技巧
          • 1. **开关状态不同步**
          • 2. **API 请求失败**
          • 3. **表格数据刷新不及时**
        • 五、总结

在 Vue.js 中使用 Ant Design 实现表格开关功能:详细教程

在现代 Web 应用程序中,用户界面的交互性对于提升用户体验至关重要。一个常见的需求是在表格中实现状态的切换,例如启用/禁用某个功能或开关设备的状态。在这篇博客中,我们将详细探讨如何在 Vue.js 项目中使用 Ant Design Vue 实现表格中的开关功能,并在用户切换开关时与后台 API 进行交互来更新状态。我们将通过一个实际的示例来演示如何一步步实现这一功能,确保你能够在自己的项目中轻松应用。

一、项目背景与需求分析

假设我们正在开发一个广告管理平台,平台的一个核心功能是管理不同广告位的状态。广告位可以启用或禁用,管理员需要能够直接在表格中查看并切换广告位的状态。同时,每当状态被切换时,系统需要自动向后台发送请求以更新数据库中的状态。

在本文中,我们将使用以下技术栈:

  • Vue.js:一个流行的前端框架,用于构建用户界面。
  • Ant Design Vue:基于 Ant Design 的 Vue 实现,为 Vue.js 提供了一套丰富的 UI 组件。
  • Axios:一个用于发送 HTTP 请求的库,用来与后台 API 交互。

我们的最终目标是:

  1. 在表格中显示广告位的详细信息,包括启用/禁用状态。
  2. 使用 Ant Design Vue 的 a-switch 组件在表格中实现开关功能。
  3. 当用户切换开关时,调用后台 API 更新广告位的状态。
  4. 如果状态更新失败,回滚开关状态并提示用户。
二、准备工作

在开始编写代码之前,确保你已经在项目中安装并配置了必要的依赖项。如果你还没有安装 Ant Design Vue 和 Axios,可以通过以下命令安装:

npm install ant-design-vue axios

接下来,引入 Ant Design Vue 组件库,并在 main.js 中进行配置:

import Vue from 'vue';
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';

Vue.use(Antd);

确保你的 Vue 项目中已经配置了 Axios,用于与后台 API 进行交互。

三、构建表格组件

我们将通过一个完整的示例代码来实现表格组件,展示广告位的相关信息,并在表格中实现开关功能。

1. 构建表格骨架

首先,我们在模板中构建一个表格组件,使用 Ant Design Vue 的 m-table 组件来展示数据:

<template>
  <a-card style="border-top: none">
    <div style="display: flex; justify-content: flex-end; margin-right: 16px; line-height: 28px; margin-bottom: 16px;">
      <a-button class="common-button-style1" type="primary" @click="add">新增</a-button>
    </div>
    <m-table
      rowKey="adSlotId"
      v-if="sorterFlag"
      bordered
      style="table-layout: fixed; word-break: break-all;"
      :scroll="{ x: 1550 }"
      :loading="loading"
      :columns="columns"
      :dataSource="data"
      :pagination="pagination"
      @change="handleTableChange"
    >
      <!-- 表格列配置将在后续部分添加 -->
    </m-table>
    <!-- 新增/编辑表单 -->
    <space-form
      @close="handleFormClose"
      @success="handleFormSuccess"
      :searchData="searchData"
      :editVisiable="formVisiable"
      :isEdit="isEdit"
      :initialValues="initialValues">
    </space-form>
  </a-card>
</template>

<script>
export default {
  data() {
    return {
      data: [], // 表格数据
      loading: false, // 加载状态
      sorterFlag: true, // 排序标志
      pagination: { current: 1, pageSize: 10 }, // 分页配置
      columns: [
        { title: '类型标识', dataIndex: 'typeLabel', key: 'typeLabel' },
        { title: '广告位Id', dataIndex: 'adSlotId', key: 'adSlotId' },
        { title: 'OS', dataIndex: 'os', key: 'os' },
        { title: '广告类型', dataIndex: 'adType', key: 'adType' },
        { title: '渠道', dataIndex: 'channel', key: 'channel' },
        { title: '开启/关闭', dataIndex: 'isEnabled', key: 'isEnabled' }, // 开关列
        { title: '操作', key: 'operation' }
      ]
    };
  },
  methods: {
    handleTableChange() {
      // 表格改变处理逻辑
    },
    handleFormClose() {
      // 关闭表单处理逻辑
    },
    handleFormSuccess() {
      // 表单成功处理逻辑
    },
    add() {
      // 新增处理逻辑
    }
  }
};
</script>

<style scoped>
/* 样式自定义 */
</style>
2. 添加开关列

在上述表格中,我们已经为 isEnabled 列预留了一个位置。接下来,我们将使用 Ant Design Vue 的 a-switch 组件来实现这一列的开关功能。

<template slot="isEnabled" slot-scope="scope">
  <a-switch
    v-model="scope.record.isEnabled"
    @change="handleSwitchChange(scope.record)"
    :checked-children="'开启'"
    :un-checked-children="'关闭'"
    :checked="scope.record.isEnabled === '1'"
  />
</template>

在这里,我们通过 v-model 将开关组件与 scope.record.isEnabled 绑定,这样开关的状态就会与数据源中的状态保持同步。通过 @change 事件,我们可以捕获用户切换开关的操作并调用相应的方法来处理状态的更新。

3. 处理开关状态更新

为了实现状态的更新,我们需要在用户切换开关时调用后台 API。我们将在组件的 methods 中添加一个方法 handleSwitchChange,用于处理这一逻辑。

<script>
import { updateStatus } from '@/api/yourApi'; // 请根据实际情况调整路径

export default {
  methods: {
    async handleSwitchChange(record) {
      try {
        // 调用后台接口更新状态
        const response = await updateStatus({ id: record.adSlotId, isEnabled: record.isEnabled });
        console.log(response);

        if (response.code === this.CONSTVAL.SUCCESSCODE) {
          this.$message.success('状态更新成功');
        } else {
          this.$message.error(response.msg || '状态更新失败');
          // 如果更新失败,回滚开关状态
          record.isEnabled = !record.isEnabled;
        }
      } catch (error) {
        console.error('状态更新失败', error);
        this.$message.error('状态更新失败');
        // 如果更新失败,回滚开关状态
        record.isEnabled = !record.isEnabled;
      }
    }
  }
};
</script>

在这个方法中,我们使用了 async/await 语法来调用后台接口 updateStatus,并根据接口的响应来判断是否更新成功。如果更新失败,我们将回滚开关的状态并提示用户。

4. API 模块实现

假设你已经在 yourApi.js 文件中定义了 updateStatus 方法。该方法通过 Axios 向后台发送 PUT 请求来更新广告位的状态。

import axios from 'axios';

export const updateStatus = (params) => {
  return axios.put('/api/update-status', params);
};

在实际项目中,你需要确保 API 的路径和参数与后台接口一致,并正确处理响应数据。

5. 操作列的实现

在表格中,我们还需要一个操作列,提供一些常用的操作按钮,如编辑、删除等。你可以在操作列中继续使用 Ant Design Vue 的 a-button 组件,并绑定相应的操作方法。

<template slot="operation" slot-scope="text, record">
  <a-button type="link" style="color: blue;" @click="adjust(record)">
    <a-icon type="update" />
    调整
  </a-button>
  <a-button type="link" style="color: green;" @click="edit(record, true)">
    <a-icon type="edit" />
    编辑
  </a-button>
  <a-button type="link" style="color: red;" @click="handleDelete(record)">
    <a-icon type="delete" />
    删除
  </a-button>
  <a-button type="link" @click="handleViewChart(record)">
    <a-icon type="bar-chart" />
    图表
  </a-button>
</template>

在这个模板中,我们为每一行的记录提供了多个操作按钮,并绑定了不同的操作方法,例如编辑、删除、查看

图表等。

四、常见问题与调试技巧

在实现上述功能的过程中,你可能会遇到一些常见的问题。以下是一些调试技巧,帮助你解决可能出现的问题。

1. 开关状态不同步

有时候,你可能会发现开关的状态和后台的数据不同步。这通常是由于 API 请求失败或响应数据不正确导致的。可以通过以下步骤排查问题:

  • 检查 updateStatus 方法的实现,确保请求和响应正确。
  • handleSwitchChange 方法中,使用 console.log 打印请求和响应,确认请求发送是否正确,响应数据是否符合预期。
  • 确保在失败时回滚开关状态。
2. API 请求失败

如果 API 请求失败,通常是网络问题、接口地址错误或参数不正确导致的。你可以通过以下方式解决:

  • 使用浏览器的开发者工具(如 Chrome 的 DevTools)查看网络请求,确认请求是否成功发送,响应状态码是否正常。
  • 检查 API 地址和参数格式,确保它们与后台接口的要求一致。
3. 表格数据刷新不及时

有时,表格数据可能不会及时刷新,导致显示的数据与后台不一致。你可以通过以下方式解决:

  • 在状态更新成功后,手动刷新表格数据。可以调用组件的 search 方法或其他数据刷新方法。
  • 确保分页、排序等操作不会影响表格数据的更新。
五、总结

在这篇博客中,我们详细介绍了如何在 Vue.js 项目中使用 Ant Design Vue 实现表格中的开关功能。通过这一示例,我们学习了如何使用 a-switch 组件实现状态切换,并在用户操作时与后台 API 进行交互更新数据。

我们从表格的基本构建开始,逐步添加了开关列和操作列,并实现了后台 API 的调用和状态同步处理。在这个过程中,我们还介绍了一些调试技巧,帮助你解决可能遇到的常见问题。

通过掌握这些技能,你可以在自己的项目中轻松实现类似的功能,为用户提供更好的交互体验。如果你在实践中遇到任何问题,欢迎在评论区留言,我们将共同探讨解决方案。

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

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

相关文章

秃姐学AI系列之:池化层 + 代码实现

目录 池化层 二维最大池化层 Max Pooling 池化层超参数 平均池化层 Mean Pooling 总结 代码实现 池化层 卷积对位置非常敏感的&#xff0c;但是我们在实际应用中我们需要一定程度的平移不变性。比如照明、物体位置、比例、外观等因素会导致图片发生变化。所以卷积对未…

【WebSocket】websocket学习【二】

1.需求&#xff1a;通过websocket实现在线聊天室 2.流程分析 3.消息格式 客户端 --> 服务端 {"toName":"张三","message":"你好"}服务端 --> 客户端 系统消息格式&#xff1a;{"system":true,"fromName"…

pygame开发课程系列(5): 游戏逻辑

第五章 游戏逻辑 在本章中&#xff0c;我们将探讨游戏开发中的核心逻辑&#xff0c;包括碰撞检测、分数系统和游戏状态管理。这些元素不仅是游戏功能的关键&#xff0c;还能显著提升游戏的趣味性和挑战性。 5.1 碰撞检测 碰撞检测是游戏开发中的一个重要方面&#xff0c;它用…

【C语言】字符函数与字符串函数(下)

字符函数与字符串函数&#xff08;下&#xff09; 文章目录 字符函数与字符串函数&#xff08;下&#xff09;1.strncpy的使用和模拟实现1.1使用示例&#xff1a;1.2模拟实现 2.strncat的使用和模拟实现2.1使用示例&#xff1a;2.2模拟实现 3.strncmp的使用和模拟实现3.1使用示…

方法汇总 | Pytorch实现常见数据增强(Data Augmentation)【附源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

目标检测 | yolov10 原理和介绍

相关系列&#xff1a; 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…

JS TypeError: Cannot read properties of null (reading ‘getAttribute’) 解决

JS TypeError: Cannot read properties of null (reading ‘getAttribute’) 解决 在JavaScript开发中&#xff0c;TypeError: Cannot read properties of null (reading getAttribute) 是一个常见的错误&#xff0c;它表明你尝试从一个值为null的对象上调用getAttribute方法。…

【AI学习】人工智能的几种主义

无意翻开了杨立昆的《科学之路》&#xff0c;书前有好多人作序&#xff0c;数了一下&#xff0c;八个人的序言&#xff0c;说明&#xff0c;至少有八个人读过这本书。其中黄铁军教授讲到了机器学习的发展历程。 人工智能发展历程中的各种主义&#xff0c;对于外行人大概都是如我…

微信好友恢复,分享4大技巧,快速恢复微信好友

在微信的社交网络中&#xff0c;好友关系的维护至关重要。但有时候&#xff0c;由于误操作或其他原因&#xff0c;我们可能会不小心删除了某些重要联系人。那么&#xff0c;如果想再度找回这些好友&#xff0c;我们应该使用什么方法呢&#xff1f; 别担心&#xff0c;本文将分…

4-1-4 步进电机原理1(电机专项教程)

4-1-4 步进电机原理1&#xff08;电机专项教程&#xff09; 4-1-4 步进电机原理1步进基本工作原理步进电机优点步进电机主要部件步进电机基本原理步进电机分类双极性单极性步进电机 4-1-4 步进电机原理1 如何使用arduino控制步进电机 步进电机从原理和工作方法上都更加复杂一些…

打靶记录13——doubletrouble

靶机&#xff1a; https://www.vulnhub.com/entry/doubletrouble-1,743/ 难度&#xff1a; 中 目标&#xff1a; 取得两台靶机 root 权限 涉及攻击方法&#xff1a; 主机发现端口扫描Web信息收集开源CMS漏洞利用隐写术密码爆破GTFObins提权SQL盲注脏牛提权 学习记录&am…

CSP-CCF 202305-1 重复局面

一、问题描述 【题目背景】 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 【问题描述】 国际象棋每一个局面可以用大小为 88 的字符数组来表示&#xff0c;其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、…

STL六大组件

STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是C标准库的一部分&#xff0c;提供了丰富且高效的数据结构和算法。STL主要由6大组件构成&#xff0c;分别是容器、算法、迭代器、适配器、仿函数和空间配置器。 容器&#xff08;Containers&#…

Midjourney进阶-反推与优化提示词(案例实操)

​ Midjourney中提示词是关键&#xff0c;掌握提示词的技巧直接决定了生成作品的质量。 当你看到一张不错的图片&#xff0c;想要让Midjourney生成类似的图片&#xff0c;却不知道如何描述画面撰写提示词&#xff0c;这时候Midjourney的/describe指令&#xff0c;正是帮助你推…

AIoTedge边缘计算平台V1.0版本发布

AIoTedge边缘计算平台V1.0&#xff0c;一款创新的AIoT解决方案&#xff0c;现已正式发布。该产品集成了NodeRED软网关、边缘物联网平台和边缘AI能力&#xff0c;为企业提供强大的边云协同能力。它支持设备管理和泛协议接入&#xff0c;确保不同设备间的无缝连接。AIoTedgeV1.0还…

SQL-事务与并发问题

在数据库管理系统中&#xff0c;事务是一个重要的概念&#xff0c;它确保了一组数据库操作要么全部成功&#xff0c;要么全部失败&#xff0c;从而维护数据的完整性和一致性。随着多个用户同时访问数据库&#xff0c;事务的并发处理变得尤为重要。 1. 事务的定义 事务是指一组…

一文读懂推荐系统

随着互联网的飞速发展&#xff0c;信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容&#xff0c;却很难找到真正符合自己兴趣和需求的信息。这时&#xff0c;推荐系统应运而生&#xff0c;它能够根据用户的兴趣和行为&#xff0c;智能地推荐相关内容&#xff0c;…

​与辉同行2日破亿,打工就是在浪费生命,真让罗永浩说对了!​

去年东方甄选的小作文事件发生之后 罗永浩就鼓励董宇辉出来单干还发表了惊天言论&#xff0c;“打工就是在浪费生命” 董宇辉接手“与辉同行”公司后&#xff0c;两天直播总销售额就已经超过了1亿元 难道真让罗永浩说对了&#xff0c;打工就是在浪费生命吗&#xff1f; 打工…

20240819解决飞凌的OK3588-C的核心板的适配以太网卡RTL8211F-CG在百兆模式下通过交换机上外网

20240819解决飞凌的OK3588-C的核心板的适配以太网卡RTL8211F-CG在百兆模式下通过交换机上外网 2024/8/19 18:00 缘由&#xff1a;由于自制的飞凌的OK3588-C的核心板的底板对空间要求高/敏感&#xff0c;并且对网速要求不高&#xff0c;百兆即可满足要求。 也就直接使用千兆网卡…

质量体系 | 这些医疗器械质量管理标准/法规有什么区别?

在医疗器械行业中&#xff0c;确保产品质量和安全至关重要&#xff0c;而ISO 9001、ISO 13485、GMP、中国《医疗器械生产质量管理规范》和QS820等标准/法规为行业提供了明确的指导。 ISO9001 ISO9001:2015 Quality management systems-Requirements&#xff08;质量管理体系要…