如何在Vue中实现延迟刷新列表:以Element UI的el-switch为例

如何在Vue中实现延迟刷新列表:以Element UI的el-switch为例

在开发过程中,我们经常需要根据用户操作或接口响应结果来更新页面数据。本文将以Element UI中的el-switch组件为例,介绍如何在状态切换后延迟1秒钟再调用刷新列表的方法,并确保UI与后台数据的一致性。

背景介绍

假设我们有一个开关(el-switch)用于启用或禁用某个部门的状态。当用户切换开关时,我们需要向服务器发送请求来更新该状态,并在成功或失败后刷新列表数据。为了提升用户体验,我们希望在请求完成后延迟1秒再执行刷新操作。

实现目标

  • 用户切换el-switch时,发送请求更新状态。
  • 根据请求结果(成功或失败)显示相应的消息提示。
  • 请求完成(无论成功还是失败),延迟1秒后再刷新列表。

示例代码

1. 模板部分

html 复制代码
<template>
  <div>
    <el-tooltip :content="scope.row.status==='0'?'启用':'禁用'" placement="top">
      <el-switch
        v-model="scope.row.status"
        active-color="#13ce66"
        inactive-color="#ff4949"
        @change="handleChange(scope.row)"
        active-value="0"
        inactive-value="1">
      </el-switch>
    </el-tooltip>
  </div>
</template>

2. 方法部分

我们将通过setTimeout函数实现延迟刷新列表的功能,并且无论请求成功还是失败都会执行延迟刷新。

javascript 复制代码
<script>
export default {
  methods: {
    handleChange(row) {
      statusByDeptId(row.deptId).then(response => {
        if (response.code === 200) {
          this.$message.success('状态更新成功');
        } else {
          this.$message.error(response.msg);
        }
      }).catch(error => {
        this.$message.error('状态更新失败');
        console.error('Error:', error);
      }).finally(() => {
        // 不管成功还是失败,都延迟 1 秒后刷新列表
        setTimeout(() => {
          this.getList();
        }, 1000); // 1000 毫秒 = 1 秒
      });
    },
    getList() {
      // 刷新列表的方法
      listDept(this.queryParams).then(response => {
        this.deptList = response.rows;
        this.total = response.total;
      });
    }
  }
};
</script>

关键点解释

  1. @change事件绑定 :我们使用@change监听el-switch的状态变化,并将当前行数据作为参数传递给handleChange方法。

    html 复制代码
    @change="handleChange(scope.row)"
  2. 处理接口响应 :在handleChange方法中,首先调用statusByDeptId接口更新状态。然后根据返回的结果进行不同的处理:

    • 如果response.code === 200,表示请求成功,显示成功消息。
    • 否则,显示错误消息。
  3. .finally()钩子 :无论接口请求是否成功,都会进入.finally()钩子,在这里我们可以执行一些后续操作,如延迟刷新列表。

  4. setTimeout延迟执行 :为了延迟1秒执行刷新操作,我们在.finally()中使用setTimeout包裹this.getList()方法。

只有成功才刷新的变体

如果你只希望在请求成功时才刷新列表,并且同样延迟1秒,可以这样修改:

javascript 复制代码
handleChange(row) {
  statusByDeptId(row.deptId).then(response => {
    if (response.code === 200) {
      this.$message.success('状态更新成功');

      // 成功后延迟 1 秒刷新
      setTimeout(() => {
        this.getList();
      }, 1000);

    } else {
      this.$message.error(response.msg);
    }
  }).catch(error => {
    this.$message.error('状态更新失败');
    console.error('Error:', error);
  });
}

注意事项

  • 避免重复绑定事件 :确保@change事件只绑定一次,以防止多次触发导致状态管理混乱。
  • 优化用户体验:你可以考虑在调用接口前显示一个加载中的提示,接口完成后隐藏它,让用户知道操作正在进行中。
  • 回滚状态 :如果需要在请求失败时保持开关状态不变,可以在.catch()中回滚开关的状态。

总结

通过上述方法,我们可以轻松实现在Vue项目中结合Element UI的el-switch组件进行状态切换后的延迟刷新列表功能。无论是统一处理成功和失败的情况,还是仅在成功时执行特定逻辑,都可以灵活调整代码以满足业务需求。

希望这篇文章能帮助你在遇到类似问题时找到合适的解决方案,并加深对Vue及Element UI组件使用的理解。如果有任何疑问或者想要了解更多相关内容,请留言交流!

相关推荐
未来之窗软件服务21 分钟前
动态表单开发避坑:改变input的值不会触发change事件即时修复策略-WdatePicker ——仙盟创梦IDE
前端·javascript·html·仙盟创梦ide·东方仙盟
计算机网络1微尘27 分钟前
JS 逆向太费劲,试试 JS 注入!
开发语言·javascript·ecmascript
Yvonne爱编码2 小时前
JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面
java·开发语言·前端·javascript·计算机外设·ecmascript
Tony小周2 小时前
QML与C++交互2
javascript·c++·交互
开开心心就好2 小时前
能按需拆分 PDF 为多个文档的工具
javascript·python·智能手机·django·pdf·word·excel
多多*2 小时前
中间件redis 功能篇 过期淘汰策略和内存淘汰策略 力扣例题实现LRU
linux·javascript·数据库·redis·sql·log4j·bootstrap
筱筱°2 小时前
Vue CLI创建vue项目,安装插件
前端·javascript·vue.js
st紫月3 小时前
Vue3 封装el-table组件
前端·javascript·vue.js
i_am_a_div_日积月累_3 小时前
解决el-input输入框输入数组传参报错
javascript·vue.js·elementui
weixin_527550403 小时前
JavaScript 性能优化:从入门到实战
开发语言·javascript·性能优化