vue前端页面数据加载添加loading效果的实现

下面是详细讲解“Vue前端页面数据加载添加loading效果的实现”的完整攻略。

1.原理解析

在前端开发中,经常需要处理异步请求和数据的加载问题。而在数据加载时,为了防止用户在等待时出现页面空白或者无反应的情况,我们需要使用loading动画来提示用户数据正在加载中。Vue2.x提供了v-if指令和自定义组件等方式,可以非常方便地实现loading效果,具体步骤如下:

  1. 定义一个loading组件
  2. 在需要加载数据的组件中,使用v-if指令绑定loading的状态
  3. 发送请求前,将loading状态置为true
  4. 数据加载完成后,将loading状态置为false

2. 示例说明

示例一

假设现在需要在页面中加载一组数据,并且当数据加载过程中需要展示loading效果。

首先,我们定义一个Loading组件,它可以接受一个props参数loading用来控制它的显隐状态。具体代码如下:

<template>
  <div v-if="loading">
    <img src="/loading.gif" alt="loading" />
  </div>
</template>
<script>
export default {
  props: {
    loading: Boolean
  }
}
</script>

接下来,在需要加载数据的组件中,我们将loading组件引入,并使用v-if指令绑定loading的状态。

<template>
  <div>
    <loading :loading="isLoading" />
    <ul>
      <li v-for="(item, index) in dataList" :key="index">{{ item }}</li>
    </ul>
  </div>
</template>
<script>
import Loading from './Loading.vue'

export default {
  components: {
    Loading
  },
  data() {
    return {
      isLoading: false,
      dataList: []
    }
  },
  mounted() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      this.isLoading = true
      // 模拟数据请求
      setTimeout(() => {
        this.isLoading = false
        this.dataList = ['apple', 'banana', 'orange']
      }, 2000)
    }
  }
}
</script>

可以看到,在mounted挂载钩子函数中,我们使用fetchData方法来模拟数据请求的过程。在发送请求前,将isLoading状态置为true,通知loading组件开始显示loading效果,在数据加载完成后,将isLoading状态置为false,loading组件则会自动隐藏。

示例二

非常方便的通过v-if指令绑定loading组件的状态来实现Loading效果,但如果某个请求非常耗时,有可能会对页面性能产生影响,为了避免页面的卡顿,我们需要对loading组件进行优化,让它能够延迟显示。

首先,在loading组件中通过v-show替换v-if,因为v-if会在每次绑定状态变化时重新创建和销毁这个组件实例,而v-show只是单纯地控制CSS的显隐。

<template>
  <div class="loading" v-show="show">
    <i class="loading-icon"></i>
  </div>
</template>
<script>
export default {
  data() {
    return {
      timer: null,
      show: false
    }
  },
  methods: {
    showLoading() {
      // 如果延迟时间小于100ms,则直接显示loading组件
      this.timer = setTimeout(() => {
        this.show = true
      }, 100)
    },
    hideLoading() {
      // 如果延时时间小于100ms,则直接隐藏loading组件
      clearTimeout(this.timer)
      this.show = false
    }
  }
}
</script>

接下来,在需要加载数据的组件中使用了两个钩子函数beforeUpdate和updated来控制loading组件的显示和隐藏,代码如下:

<template>
  <div>
    <loading ref="loading" />
    <ul>
      <li v-for="(item, index) in dataList" :key="index">{{ item }}</li>
    </ul>
  </div>
</template>
<script>
import Loading from './Loading.vue'

export default {
  components: {
    Loading
  },
  data() {
    return {
      dataList: []
    }
  },
  mounted() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      // 显示loading效果
      this.$refs.loading.showLoading()
      // 模拟数据请求
      setTimeout(() => {
        this.$refs.loading.hideLoading()
        this.dataList = ['apple', 'banana', 'orange']
      }, 3000)
    }
  },
  beforeUpdate() {
    this.$refs.loading.hideLoading()
  },
  updated() {
    this.$refs.loading.showLoading()
  }
}
</script>

在fetchData方法中,我们使用this.$refs.loading.showLoading()来启动loading组件,在数据加载完成后,使用this.$refs.loading.hideLoading()来关闭它。

在beforeUpdate钩子函数中,我们通过隐藏loading组件的方式来卡住页面,让它在下次更新时才显示。这样一来,即使数据请求需要耗费很长的时间,页面也不会在请求时变得卡顿不响应,用户体验也会得到大大的提升。

3. 总结

以上就是Vue前端页面数据加载添加loading效果的实现攻略,我们可以通过v-if指令、自定义组件、钩子函数等方法实现loading效果。在实际项目中,我们可以根据具体情况选择合适的方式来实现loading效果,提高用户体验,增强页面性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue前端页面数据加载添加loading效果的实现 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 火龙果写作如何修改用户名?火龙果写作修改用户名技巧

    下面是详细讲解火龙果写作如何修改用户名的完整攻略。 修改用户名步骤 登录火龙果写作官网,进入个人中心界面。 点击右上角的“个人中心”图标,进入个人中心界面。 在个人中心界面,找到用户名所在处。 点击用户名所在处右侧的“编辑”按钮。 进入编辑界面后,可以修改用户名和个人资料等信息。 修改完毕后,点击“保存”按钮,完成修改操作。 示例说明 示例一 小明的用户名是…

    other 2023年6月27日
    00
  • MySQL表字段设置默认值(图文教程及注意细节)

    下面是 “MySQL表字段设置默认值” 的完整攻略: 1. 概述 在 MySQL 数据库中,可以为表的字段设置默认值。当用户没有为某个字段提供值时,系统会自动使用默认值填充。 默认值可以设置为静态数值、表达式或函数,这样可以避免在插入新数据时重复输入相同的值。 2. 默认值的设置方法 在创建表时,可以在字段定义中使用 DEFAULT 关键字来设置默认值。如下…

    other 2023年6月25日
    00
  • vue封装echarts公用组件库

    Vue封装ECharts公用组件库 简介 在Web前端开发中,数据可视化一直是非常重要的一部分。而ECharts作为一款优秀的开源可视化库,也广受开发者的喜爱,已经成为了Web前端可视化领域的一种标配。然而,在实际项目开发中,每次都需要手动编写ECharts相应的代码,会浪费大量的时间和精力,为此我们可以将常用的ECharts组件进行封装,构建一个公用的组件…

    其他 2023年3月28日
    00
  • java 命名空间 命名规则第2/2页

    Java命名空间和命名规则 Java中的命名空间是一种用于组织和管理类、接口、变量和其他命名实体的机制。命名空间可以帮助避免命名冲突,并提供代码的可读性和可维护性。以下是Java命名空间和命名规则的详细攻略。 包(Package) 包是Java中用于组织和管理类和接口的主要机制。包提供了一种层次结构,可以将相关的类和接口组织在一起。以下是包的命名规则: 包名…

    other 2023年10月13日
    00
  • QT实现贪吃蛇游戏代码详解

    QT实现贪吃蛇游戏代码详解 1. 介绍 贪吃蛇是一款经典的游戏,在QT中实现贪吃蛇游戏,可以通过练习,加深对游戏编程的理解,也可以加深对QT编程的熟练程度。 2. 程序结构 在QT中实现贪吃蛇游戏,建议采用以下的结构: – main.cpp – mainwindow.h – mainwindow.cpp – snake.h – snake.cpp 其中,ma…

    other 2023年6月26日
    00
  • 如何创建电脑用户名 电脑用户名是什么怎么修改

    如何创建电脑用户名 首先,我们需要明确电脑用户名是用于登录计算机的身份标识。下面是创建电脑用户名的步骤: 1.打开计算机,进入桌面界面。2.点击左下角的“开始”按钮,在弹出的菜单中选择“设置”。3.在“设置”窗口中,点击“账户”。4.在“账户”页面中,选择“家庭和其他用户”下的“添加其他人”。5.在弹出的窗口中,选择“没有此人的帐户”。6.在下一个页面中,点…

    other 2023年6月27日
    00
  • Java BigDecimal类的使用和注意事项

    Java BigDecimal类的使用和注意事项 在Java中,float和double类型的数值在进行科学计算和精度比较等操作时可能存在精度上的误差,这是因为它们采用二进制浮点数进行存储和计算。为了避免这种误差,JDK提供了BigDecimal类来支持高精度的数值计算。 创建BigDecimal对象 我们可以通过以下方式来创建一个BigDecimal对象:…

    other 2023年6月26日
    00
  • bat 文件 学习使用指南

    下面是一份“bat 文件 学习使用指南”的详细攻略。 什么是 Bat 文件 Bat 文件,也称作批处理文件,是 Windows 系统下的一种脚本文件。它通常以 .bat 格式保存,能够执行多个命令和操作,简化我们的工作。使用 Bat 文件可以自动化地完成一些重复性工作,提高效率。 Bat 文件语法 Bat 文件语法相当简单。它以一系列命令为基础,每个命令占据…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部