最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • element取消全局loading

    正文概述 掘金(沧海的雨季)   2021-07-29   617

    element-ui取消全局loading

    背景

    前两天在开发一个管理后台项目时, 遇到了一个问题,后端接口返回特别慢,由于该接口调用的是第三方API,无法通过后端去处理。此时想到用loading动画,但随之而来也产生了不少问题, 在此记录一下以方便大家能够遇到此类问题可以借鉴。

    处理方案

    在表格内添加loading

          <el-table
            v-loading="loading"
            :data="tableData"
            border
            tooltip-effect="dark"
            :row-class-name="tableRowClassName"
            style="margin-top: 20px"
          >
          ...
          </el-table>
    

    此种方式很简单,在请求开始前设置loading为true,结束后设置为false。element官网也有详细的概述,在此不过多描述。

    在全局内容容器内添加动画

    第一种方式确实简单,但开发后UI效果并不是特别理想,所以考虑在内容容器内添加loading。此时使用了以服务的方式加载loading。

    但此时也出现了一些问题, 首先在请求开始后,立即切换到其它页面,此时还在显示全局loading。

    而且再次切回该页面又会再次发起请求,loading显示位置也不正常。 切换路由是要取消请求和loading的,我们需要在组件路由生命周期内进行监听。在离开此路由时,取消此次请求。

    以下为具体代码:

    离开路由生命周期

      beforeRouteLeave(to, from, next) {
        // 导航离开该组件的对应路由时调用
        // 可以访问组件实例 `this`
        this.source.cancel("离开此页面取消请求");
        next();
      },
      ...
    

    请求事件

        getTable() {
          const CancelToken = axios.CancelToken;
          this.source = CancelToken.source();
          const options = {
            target: ".el-main",
            text: "拼命加载中...",
            spinner: "el-icon-loading",
            lock: true,
            background: "rgba(255,255,255,0.4)",
          };
          const loadingInstance = this.$loading(options);
          this.axios
            .post(
              "***",
              qs.stringify({
                name: this.q,
                page: this.listQuery.page,
              }),
              {
                cancelToken: this.source.token,
              }
            )
            .then((res) => {
              this.tableData = res.data.data;
              this.$nextTick(() => {
                // 以服务的方式调用的 Loading 需要异步关闭
                loadingInstance.close();
              });
            })
            .catch((thrown) => {
              // 如果请求被取消则进入该方法判断
              if (axios.isCancel(thrown)) {
                console.log("Request canceled", thrown.message);
                this.$nextTick(() => {
                  // 以服务的方式调用的 Loading 需要异步关闭
                  loadingInstance.close();
                });
              } else {
                // handle error
              }
            });
        },
    

    在离开页面的同时取消请求,关闭loading动画。

    感悟

    此次为了追求用户体验感更好,为此也走了不少的弯路,但我觉得还是很有意义的。同时也学到了不少新东西,如怎么取消一个请求等。还是很有收获的。


    起源地下载网 » element取消全局loading

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元