vue加载动画element ui V-loading属性的踩坑记录

 更新时间:2023年06月08日 16:52:24   作者:刘大气  
这篇文章主要介绍了vue加载动画element ui V-loading属性方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue加载动画element ui V-loading属性

根据需求,由预览按钮打开弹窗,且弹窗需要渲染的数据较多,渲染的速度比较慢,所以要加一个加载中的效果,element ui的 v-loading属性就正好可以解决这一需求,但是当加入这一属性之后发现,是实现了加载功能,但是加载并不能自己判断何时停下,又不像其他页面需要页面刷新的时候出现加载动画效果,所以给diglog弹窗一个加载动画,但如何判断他何时停下呢

 想了好几种办法最后想通了,在点击弹窗的时候先给一个加载属性为true,让他加载,然后等请求接口赋值以后,再给他一个属性为false关掉加载,就可以了

element-ui v-loading 指令 instance.close()报错

解决 sentry issues 时看到一个这样的报错

TypeError: Cannot read properties of undefined (reading ‘close’)

报错的代码来自 element-plus 的 v-loading 指令, 在值变为 false 执行 close 函数时, 示例 instance 为空导致的问题

原因

页面是列表页, 每个列表项有一个展开加载数据的 v-loading, 代码给 v-loading 初始值传入了 undefined, 请求数据之前给 loading 做了个初始化, 将 loading 值初始为 false

v-loading="expendStepData[item.productOrderId]?.loading"

数据从 undefined 变成 false 触发了 v-loading 的 update, 因为值为 false, 所以 v-loading 执行了 close 操作, 因为 loading 的值从来没有是 true, 所以没有创建实例, 导致 instance 为 undefined, 所以执行 instance.close() 自然就报错了

element-plus loading 代码

const vLoading = {
  mounted(el, binding) {
    if (!!binding.value) {
      createInstance(el, binding);
    }
  },
  updated(el, binding) {
    const instance = el.instance;
    if (binding.oldValue !== binding.value) {
      if (binding.value) {
        createInstance(el, binding);
      } else {
        instance.close();
      }
    }
  },
  unmounted(el) {
    var _a;
    (_a = el == null ? void 0 : el.instance) == null ? void 0 : _a.close();
  }
};

初始值为 undefined 导致 mounted 的时候没有创建实例, 而值从 undefined 变为 false 时, 会触发 update, 导致执行 instance.close(), 这个时候 v-loading 的 instance 没有创建是一个 undefined

建议

v-loading 严格传入 boolean 值, 虽然大多数情况不会有问题, 即使像我这样的情况, 其实也不影响使用, 如果不是 sentry, 估计页没有发现这个问题, 但是能避免的问题还是要避免; 我的 element-plus 时候 2.x 版本的, 不知道 3.x 是否还有这个问题 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中三种不同插槽使用小结

    vue中三种不同插槽使用小结

    本文主要介绍了vue中三种不同插槽使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 详解vue.js实现全屏显示功能示例

    详解vue.js实现全屏显示功能示例

    这篇文章主要为大家介绍了vue.js实现全屏显示功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • vue实现城市列表选择功能

    vue实现城市列表选择功能

    这篇文章主要介绍了vue实现城市列表选择功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • 详解vue-cli3多环境打包配置

    详解vue-cli3多环境打包配置

    这篇文章主要介绍了vue-cli3多环境打包配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)

    深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)

    这篇文章主要介绍了golang zap 日志库使用(含文件切割、分级别存储和全局使用等),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 基于Vue3创建一个简单的倒计时组件

    基于Vue3创建一个简单的倒计时组件

    这篇文章主要给大家介绍了基于Vue3创建一个简单的倒计时组件的代码示例,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11
  • Vue Build后的项目的根路径配置方式

    Vue Build后的项目的根路径配置方式

    这篇文章主要介绍了Vue Build后的项目的根路径配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue项目中实现ElementUI按需引入过程解析

    Vue项目中实现ElementUI按需引入过程解析

    这篇文章主要介绍了Vue项目中实现ElementUI按需引入,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Vue3 Echarts通用的折线图带阴影效果实现

    Vue3 Echarts通用的折线图带阴影效果实现

    在环保仓管项目中,做了一个每月对药品、消耗品、设备的进出,进行统计百分比,效果好看,后面经常在用这个样式,下面通过示例代码分享Vue3 Echarts通用的折线图带阴影效果实现,感兴趣的朋友一起看看吧
    2024-07-07
  • vue.js出现Vue.js not detected错误的解决方案

    vue.js出现Vue.js not detected错误的解决方案

    这篇文章主要介绍了vue.js出现Vue.js not detected错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论