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中的按钮、下拉搜索等,也是一样的解决方法。
在这里插入图片描述

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-table,如果每行都有el-select,并且需要实现触底加载的功能,可以按照以下步骤进行操作: 1. 首先,在el-table的每一行添加一个el-select组件,并设置一个v-model来绑定选的值。例如: ```html <el-table :data="tableData"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column label="Select"> <template slot-scope="scope"> <el-select v-model="scope.row.selectedValue" @change="handleSelectChange(scope.row)"> <el-option v-for="option in options" :key="option.value" :label="option.label" :value="option.value"></el-option> </el-select> </template> </el-table-column> </el-table> ``` 2. 然后,监听el-table的滚动事件,并判断是否触底。当触底时,执行加载更多数据的操作。例如: ```html <el-table :data="tableData" @scroll="handleTableScroll"> <!-- ... --> </el-table> ``` ```javascript methods: { handleTableScroll(event) { const target = event.target; if (target.scrollHeight - target.scrollTop === target.clientHeight) { // 触底加载更多数据的操作 this.loadMoreData(); } }, loadMoreData() { // 加载更多数据的逻辑 // ... } } ``` 3. 最后,根据需要,在loadMoreData方法请求后端接口获取更多数据,并将新数据追加到tableData。例如: ```javascript methods: { loadMoreData() { // 请求后端接口获取更多数据 // ... // 将新数据追加到tableData this.tableData = this.tableData.concat(newData); } } ``` 这样,当滚动到el-table底部时,就会触发加载更多数据的操作,实现el-select的触底加载功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值