vue+element-ui实现表格中的删除按钮加载动画

vue+element-ui实现表格中的删除按钮加载动画

背景:

在同事的项目中有这样的一个要求:
就在在表格中的操作栏有一个删除按钮,点击的时候加载loading的动画,加载完毕后loading动画停止。
同事开始的时候是全局定义一个isLoading的变量来控制,
结果发现每点击一个删除按钮,就会导致所有的按钮加载loading动画。
真棒!bug又出现了,琢磨了代码一番,于是有了一下的方案!

思路
导致bug的原因是因为共用这个全局的变量,既然全局不行,那么我们就可以从每一行来控制
1.放弃data里定义一个isLoading
2.在拿到整个表格的数据之后,做一番处理,就是每遍历一个item对象,就往其中加入一个isLoading的属性,并赋值为false
3.在点击删除的时候就给row.isLoading赋值为true,等删除成功后设置为row.isLoading=false.
4.通过以上步骤即可实现删除按钮的loading动画

代码实现

html部分

<el-table :data="tableData" style="width: 100%" border>
  <el-table-column label="日期" width="180">
        <template slot-scope="scope">
            <i class="el-icon-time"></i>
            <span style="margin-left: 10px">{{ scope.row.date }}</span>
        </template>
    </el-table-column>
    <el-table-column label="姓名" width="180">
        <template slot-scope="scope">
            <el-popover trigger="hover" placement="top">
                <p>姓名: {{ scope.row.name }}</p>
                <p>住址: {{ scope.row.address }}</p>
                <div slot="reference" class="name-wrapper">
                    <el-tag size="medium">{{ scope.row.name }}</el-tag>
                </div>
            </el-popover>
        </template>
    </el-table-column>
    <el-table-column label="操作">
        <template slot-scope="scope">
            <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
            <el-button size="mini" :loading="scope.row.isLoading" type="danger"
                @click="handleDelete(scope.$index, scope.row)">删除</el-button>
        </template>
    </el-table-column>
</el-table>

javascript部分

var vm = new Vue({
  el: "#app",
    data: {
        tableData: []
    },
    mounted() {
        this.handleFormat()
    },
    methods: {
        async handleFormat() {
            const {
                data
            } = await axios.get('./data.json');
            data.forEach(item => {
                item['isLoading'] = false;
                this.tableData.push(item)
            })
        },
        handleEdit(index, row) {
            console.log(index, row);
        },
        handleDelete(index, row) {
            row.isLoading = true;
            this.$confirm('此操作将进行删除操作, 是否继续?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
            }).then(() => {
                this.$message({
                    type: 'success',
                    message: '删除成功!'
                });
                setTimeout(function () {
                    row.isLoading = false;
                }, 1500)
            }).catch(() => {
                this.$message({
                    type: 'info',
                    message: '已取消删除'
                });
                row.isLoading = false;
            });
        }
    }
})

效果展示
在这里插入图片描述

ending
真棒!又学到了新的知识!!加油

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值