table表单上加局部 loading

2,805 阅读1分钟

这是我参与8月更文挑战的第6天,活动详情查看: 8月更文挑战”juejin.cn/post/698796…

思路:使用v-loading在接口为请求到数据之前,显示加载中,直到请求到数据后消失。

先看报错: Failed to resolve directive: loading

在table上直接加上v-loading = “loading” image.png

要在 main.js 中添加:

import { Loading } from 'element-ui';
Vue.use(Loading.directive);

在table 表头中添加: v-loading="loading"

效果:

image.png 发现表头被遮盖了 不是想要的效果!

实现局部loading效果(不包含表头)

不在main.js中去引入 来到组件中引入

import { Loading } from 'element-ui';

在方法中:

      // 表格数据
    getTableData() {
      this.loading && this.loading.close(); // 这里是为了防止还没有请求结束(loading未关闭)再次连续触发
      // Loading.service(options); 是直接调用了
      this.loading = Loading.service({
        // lock: true, //锁定屏幕的滚动
        text: "拼命加载中", //加载文案
        backgroundColor: "rgba(55,55,55,0.4)", //背景色
        spinner: "el-icon-loading", //加载图标
        // 可以直接使用选择器名称,当然也可以用ref获取DOM结构,可以提前把DOM结构缓存起来,
        // 这样频繁被触发的时候是不是就不会重新获取DOM了呢?好像可以提升一丢丢性能吧(个人理解)
        target: document.querySelector(".el-table__body") //loading需要覆盖的DOM节点,默认为body
      });

    

      getyuyueTableData(this.formData)
        .then(res => {
        
          setTimeout(() => {
            this.loading.close();
          }, 500);
          
        })
        .catch(err => {
          this.$message.error(err);
        });
    },

注意:要拿到dom就要在mounted()中发送请求

this.loading && this.loading.close(); // 这里是为了防止还没有请求结束(loading未关闭)再次连续触发

  • 添加这句代码就是预防出现下面连续点击发送请求的效果

image.png