el-table中给每行添加loading效果案例

前言

如图所示,在el-table表格中,使用el-switch组件,想让每个组件在开关的时候都有一个loading效果,也可以是el-button,原理都是类似,下面直接给方案。
这是一个失败的效果

错误分析

错误代码如下,可以看见,我给switchLoading应用到每一个el-switch组件上了,所以每次都是全部组件loading,只要我们给它单独出来就可以搞定。

<el-table-column prop="enable" label="是否启用" width="80" align="center">
   <template #default="{ row }">
     <el-switch
       v-model="row.enable"
       active-text="正常"
       inactive-text="停用"
       inline-prompt
       :loading="switchLoading"
       style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
       @change="changeHandle(row)"
     />
   </template>
 </el-table-column>
 
//ts
const changeHandle = (row) => {
  switchLoading.value = true
  changeEnable(row.id)
    .then((resp) => {
      ElMessage.success('操作成功!')
    })
    .catch((error) => {
      console.log(error)
    })
    .finally(() => {
      switchLoading.value = false
    })
}

解决方法

方案一:

让每一个switch组件都有自己的loading,那直接在row的属性上加一个loading属性即可,这样最方便,也不用我们声明变量。

// template
<el-table-column prop="enable" label="是否启用" width="80" align="center">
   <template #default="{ row }">
     <el-switch
       v-model="row.enable"
       active-text="正常"
       inactive-text="停用"
       inline-prompt
       :loading="row.loading" // 改动位置
       style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
       @change="changeHandle(row)"
     />
   </template>
 </el-table-column>

//ts
const changeHandle = (row) => {
  row.loading = true // 改动位置
  changeEnable(row.id)
    .then((resp) => {
      ElMessage.success('操作成功!')
    })
    .catch((error) => {
      console.log(error)
    })
    .finally(() => {
      row.loading = false // 改动位置
    })
}

方案二:

给loading属性加一个判断switchLoading == row.id,只有在id相等的时候才进行loading效果,这样需要我们声明一个const switchLoading = ref('') 变量来存储当前的id,也可以解决!

// template
<el-table-column prop="enable" label="是否启用" width="80" align="center">
  <template #default="{ row }">
    <el-switch
      v-model="row.enable"
      active-text="正常"
      inactive-text="停用"
      inline-prompt
      :loading="switchLoading == row.id"  // 改动位置
      style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
      @change="changeHandle(row)"
    />
  </template>
</el-table-column>

// ts
const changeHandle = (row) => {
  switchLoading.value = row.id // 改动位置
  changeEnable(row.id)
    .then((resp) => {
      ElMessage.success('操作成功!')
    })
    .catch((error) => {
      console.log(error)
    })
    .finally(() => {
      switchLoading.value = '' // 改动位置
    })
}

最终效果

以上2种方案都可以解决,效果如下,你喜欢哪种解决方案呢?我选择第一种同理,在table中的按钮、下拉搜索等,也是一样的解决方法。
在这里插入图片描述

相关推荐

  1. Elementel-table如何获取的id

    2024-03-16 16:22:02       49 阅读
  2. el-table点击加背景颜色

    2024-03-16 16:22:02       61 阅读
  3. elementUiel-table合计添加点击事件

    2024-03-16 16:22:02       141 阅读
  4. vue3el-table实现表格合计

    2024-03-16 16:22:02       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 16:22:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 16:22:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 16:22:02       82 阅读
  4. Python语言-面向对象

    2024-03-16 16:22:02       91 阅读

热门阅读

  1. ReactNative

    2024-03-16 16:22:02       39 阅读
  2. qt QtMultimedia 报错

    2024-03-16 16:22:02       44 阅读
  3. P8752 [蓝桥杯 2021 省 B2] 特殊年份 Python

    2024-03-16 16:22:02       39 阅读
  4. 乐观锁与悲观锁

    2024-03-16 16:22:02       42 阅读
  5. Flink 简述

    2024-03-16 16:22:02       40 阅读
  6. python adb脚本

    2024-03-16 16:22:02       42 阅读
  7. 交叉编译代码

    2024-03-16 16:22:02       45 阅读
  8. ChatGPT升级版:如何借助ChatGPT高效撰写学术论文

    2024-03-16 16:22:02       49 阅读
  9. windows各个版本安装SSH

    2024-03-16 16:22:02       43 阅读
  10. CMake官方教程8--自定义命令和生成文件

    2024-03-16 16:22:02       38 阅读