Element-ui 给table里的每个按钮设置loading

项目场景:

        在table中,点击不同行的重新升级按钮,只有点击的按钮进行加载,请求后台成功后停止加载。


问题描述:

      利用elementui里面的v-loading给el-table里面的按钮加这个指令时,点击其中一个按钮全部的按钮会出现一个loading的效果。怎样解决这个问题呢?


解决方案:

<el-button @click="otaup(scope.row)" :loading="scope.row.loading" >重新升级</el-button>

   //重新升级功能

    async otaupagain(row){

      row.loading = true;

      console.log(row);

      let infouser = JSON.parse(window.localStorage.getItem('userinfo')).username;

      await this.getRequest(`/job/reUpdrade?                   taskId=${row.taskId}&executor=${infouser}`).then(res=>{

         console.log(res);

         if(res.code == 0){

           row.loading = false;

           this.$message.success('已下发重新升级任务!');

           this.$router.push({

               path:'/RackinfoUpdata',

               query:{rackinfo:JSON.stringify({id:this.rowinfohis.id,taskId:res.data.taskId})},

          });

        }else{

          row.loading = false

          this.$message.error(res.message);

        }

      });

    },

   

        //渲染表格的时候给每条表格数据加一个属性loading  默认值为 false;

        this.runhiscasetableData = res.data.map(res=>{//处理数据给表格

            //添加属性,设置loading默认值

            this.$set(res, 'loading', false)

            return res

        });

       从代码可以看出,是给每一行的按钮都设置了一个加载的状态,而不是设置一个全局的变量。在请求前,设置此行的按钮为加载状态,在请求成功后取消加载。

       需要注意的是,在进行网络请求中修改加载状态时,需先设置其初始值。否则不生效。设置初始值也就是在getList()方法时进行的,设置每行的loading默认初始值是false。这是因为在请求过程中修改状态时Vue不能检测到对象属性的添加或删除,就必须先给对象添加此属性,然后再去修改。

猜你喜欢

转载自blog.csdn.net/weixin_63443983/article/details/127118082