Vue全局loading及错误提示的思路与实现

本文将详细讲解如何通过Vue全局loading及错误提示来提供良好的用户体验。该方案可用于任何基于Vue构建的项目,并且易于扩展。

需求分析

在处理异步请求时,用户需要了解操作的进展情况和任何错误信息。此时,全局loading和错误提示成为必要功能。解决方案需要解决以下需求:

  • 可在应用程序中的所有组件中使用loading和错误提示。
  • loading和错误提示需要允许用户自定义。
  • 所有组件及单页应用必须支持异步路由请求。

实现思路

为实现全局loading及错误提示,我们需要在Vue根实例中添加两个成员变量:

data() {
  return {
    loading: false,
    error: null
  };
}

当我们需要显示loading或错误提示时,可以通过更新这两个变量的方式来控制显示/hide状态。

  • loading: 当数据正在加载时这个值为true,当数据加载完成时这个值设置为false。
  • error:当数据在请求时发生错误时,将错误信息赋值给这个变量。

实现全局的loading

我们首先来看如何实现全局loading。我们通过axios的拦截器,可以监听所有请求的发出和响应。当请求发出时,我们设置loading状态为true, 当请求响应后,我们设置loading状态为false。

import axios from 'axios';

axios.interceptors.request.use(config => {
  // 请求发出前 显示loading
  this.loading = true;
  return config;
}, error => {
  // 发出请求错误时 不需要显示loading
  return Promise.reject(error);
});

axios.interceptors.response.use(response => {
  // 响应完成后  关闭loading
  this.loading = false;
  return response;
}, error => {
  // 响应发生错误时, 关闭loading并设置错误信息
  this.loading = false;
  this.error = error.response.data.message || error.message;
  return Promise.reject(error);
});

在上面的代码中,我们扩展了axios的拦截器,添加了两个监听函数,用于在请求发出前和请求响应后进行状态调整。

实现全局的错误提示

接下来,我们来看如何实现全局的错误提示。我们可以在根Vue实例中注册一个全局错误处理程序,然后在任何地方发生错误时捕获并处理这些错误。可以考虑使用Vue的插件机制封装全局错误处理程序。

import Vue from 'vue';

const Toast = {};
Toast.install = function(Vue, options) {
  Vue.prototype.$toast = (message) => {
    const Component = Vue.extend({
      template: `<div class="toast toast-active">
        <div class="toast-message">${message}</div>
      </div>`
    });

    const component = new Component().$mount();
    document.body.appendChild(component.$el);

    setTimeout(() => {
      document.body.removeChild(component.$el);
    }, 3000);
  };
};

Vue.use(Toast);

上述代码中,我们创建一个Toast插件。该插件注册了一个$toast方法,显示错误消息。当该方法被调用时,该方法会将消息渲染到页面上,然后在3秒钟后自动消失。

现在,我们可以扩展我们的axios拦截器,以使用$toast方法来显示错误消息。当我们发生请求错误时,设置错误信息并通过插件的方式显示出来。

axios.interceptors.response.use(response => {
  // 响应完成后  关闭loading
  this.loading = false;
  return response;
}, error => {
  // 响应发生错误时, 关闭loading并设置错误信息
  this.loading = false;
  this.error = error.response.data.message || error.message;
  this.$toast(this.error);
  return Promise.reject(error);
});

示例

下面是如何在组件中使用全局loading和错误提示的示例:

<template>
  <div>
    <button @click="loadData">加载数据</button>

    <div v-if="loading">正在加载...</div>

    <div v-else>
      <div v-if="error">{{ error }}</div>
      <ul>
        <li v-for="item in items">{{ item.name }}</li>
      </ul>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      items: [],
      loading: false,
      error: null
    };
  },

  methods: {
    async loadData() {
      this.loading = true;
      try {
        const res = await axios.get('/api/items');
        this.items = res.data.items;
      } catch(err) {
        this.error = err.message || err.response.data.message;
      }
      this.loading = false;
    }
  }
};
</script>

在上面的代码中,我们首先在组件中绑定loadingerror状态。当我们点击loadData按钮时,设置loading状态为true,执行ajax请求,请求完成后将获取的数据保存在items变量中,如果请求发生错误,则设置错误信息到error变量中。

接下来,使用v-if指令根据loadingerror变量来显示或隐藏加载信息和错误信息。在数据准备好之后,我们显示items数据。

总结

通过拦截器和插件,我们可以轻松地实现全局loading和错误提示。在以上文中的实现过程中,我们使用了axios作为ajax库,但实际上,这种方法也可以应用于其他ajax库。如有问题请随时联系。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue全局loading及错误提示的思路与实现 - Python技术站

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

相关文章

  • 详解nodejs 文本操作模块-fs模块(四)

    详解nodejs 文本操作模块-fs模块(四) 在 nodejs 中,fs 模块是处理文件和目录的核心模块。在读取或写入文本数据时,fs 模块提供了多种方法和选项。本文将详细讲解如何使用 fs 模块进行文本操作。 读取文本文件 使用 fs.readFile() 方法可以读取文本文件。该方法包含三个参数:文件路径、编码格式和回调函数。例如,下面的示例将读取指定…

    node js 2023年6月8日
    00
  • Node.js基于cors解决接口跨域的问题(推荐)

    Node.js 是一个基于 JavaScript 运行的平台,可用于构建高性能、可伸缩的 Web 应用程序。在使用 Node.js 构建 Web 应用程序时,经常需要解决跨域请求的问题。本文将介绍如何在 Node.js 环境下使用 CORS 库来解决接口跨域的问题。 什么是跨域请求? 跨域请求是指在浏览器中通过 AJAX(Asynchronous JavaS…

    node js 2023年6月8日
    00
  • 详解Nuxt.js 实战集锦

    详解Nuxt.js 实战集锦 1. 什么是Nuxt.js Nuxt.js是一个Vue.js的服务器渲染应用框架,它将开发全面进阶到以前不可能的地步。Nuxt.js简化了Vue.js应用的开发过程,并且提供了很多额外的功能,例如自动生成基于路由的代码、自动生成SEO友好的页面等等。Nuxt.js还集成了Vue.js的生态环境,因此您可以使用Vue.js的组件、…

    node js 2023年6月8日
    00
  • PostgreSQL Node.js实现函数计算方法示例

    我来详细讲解“PostgreSQL Node.js实现函数计算方法示例”的完整攻略。 PostgreSQL Node.js实现函数计算方法示例 前言 在实际开发中,我们经常需要使用数据库中的函数计算数据。PostgreSQL是一个强大的关系型数据库,在其中定义和调用函数非常方便。同时,Node.js是一个开放源代码、跨平台的Javascript运行环境,可用…

    node js 2023年6月8日
    00
  • 利用nodeJs anywhere搭建本地服务器环境的方法

    利用Node.js Anywhere搭建本地服务器环境是非常方便的,下面是详细的攻略过程: 准备工作 安装Node.js(如果没有安装的话)。 注册一个Node.js Anywhere的账号。 创建node.js项目 新建一个文件夹,作为项目的根目录。 在该目录下创建一个index.js文件,并使用下面的代码来编写该文件。 “`js const http …

    node js 2023年6月8日
    00
  • Node批量爬取头条视频并保存方法

    以下是“Node批量爬取头条视频并保存方法”的完整攻略: 1. 准备工作 首先,需要确保已经安装了Node.js和npm。然后,安装所需的依赖模块:cheerio和request-promise。安装命令如下: npm install cheerio request-promise 2. 获取视频列表 爬取头条视频,需要先获取视频列表。可以通过头条的API接…

    node js 2023年6月8日
    00
  • nodejs读写json文件的简单方法(必看)

    下面为您详细讲解“nodejs读写json文件的简单方法(必看)”。 标题 文章标题应简明扼要地概括全文,下文主要介绍如何在Node.js中简单地读写json文件。 简介 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它可以使JavaScript的运行环境脱离浏览器。当需要在Node.js中进行json文件的读写时,可以使用N…

    node js 2023年6月8日
    00
  • Vue中nvm-windows的安装与使用教程(亲测)

    Vue中nvm-windows的安装与使用教程(亲测) 本篇文章讲解在Windows系统下如何安装并使用nvm-windows,nvm-windows是一个简单、易用的Node.js版本管理器,可以让你方便地切换不同版本的Node.js。 步骤一:下载nvm-windows 打开nvm-windows的GitHub仓库 https://github.com/…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部