vue 实现element-ui中的加载中状态

针对这个问题我将提供一份基本的思路和步骤。

思路

在 Element UI 中,它提供了一种自己的 loading 组件,用于展示加载状态。而它的实现方式是使用 Vue 在全局挂载了一个 $loading 对象,里面包含了一些属性、方法和事件。我们可以借鉴这个实现方式,来实现自己的加载中状态。

主要思路是:

  1. 在 Vue 的原型上定义一个名为 $loading 的对象

  2. $loading 对象中包含以下属性:

  3. show:用于标识是否展示加载状态

  4. text:用于展示加载状态时的提示文字

  5. background:用于展示加载状态时的背景颜色

  6. $loading 对象中包含以下方法:

  7. show:展示加载状态

  8. hide:隐藏加载状态

  9. 定义一个 Vue 全局的混入,用于在所有组件中访问 $loading 对象。

  10. 在需要展示加载状态的组件中,可以通过调用 $loading.show() 方法来展示加载状态,通过 $loading.hide() 方法来隐藏。

  11. 另外,还可以使用自定义指令等方式来快速实现加载状态。

实现步骤

下面是具体的实现步骤:

1. 定义 $loading 对象

Vue.prototype.$loading = {
  show(text = '加载中', background = 'rgba(0, 0, 0, 0.7)') {
    const div = document.createElement('div')
    div.innerHTML = `
      <div style="
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: ${background};
        z-index: 9999; 
        display: flex;
        align-items: center;
        justify-content: center;
      ">
        <div style="
          position: relative;
          display: flex;
          align-items: center;
          justify-content: center;
        ">
          <i class="el-icon-loading" style="
            font-size: 30px;
            margin-right: 10px;
            color: #fff;
          "></i>
          <span style="
            color: #fff;
            font-size: 16px;
          ">${text}</span>
        </div>
      </div>
    `
    document.body.appendChild(div)
  },

  hide() {
    const loading = document.querySelector('.loading')
    if (loading) {
      document.body.removeChild(loading)
    }
  }
}

2. 定义全局混入

Vue.mixin({
  mounted() {
    this.$loading = Vue.prototype.$loading
  }
})

3. 在需要展示加载状态的组件中使用

<template>
  <div>
    ...
    <button @click="getData">获取数据</button>
    ...
  </div>
</template>

<script>
export default {
  methods: {
    async getData() {
      try {
        this.$loading.show('数据加载中...')
        const res = await fetchData()
        // do something with res
      } catch (err) {
        console.log(err)
      } finally {
        this.$loading.hide()
      }
    }
  }
}
</script>

4. 使用自定义指令

Vue.directive('loading', {
  inserted(el, binding) {
    const text = binding.value || '加载中'
    const div = document.createElement('div')
    div.className = 'loading'
    div.innerHTML = `
    <div style="
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.5);
      z-index: 999;
      display: flex;
      align-items: center;
      justify-content: center;
    ">
      <i class="el-icon-loading" style="
        font-size: 30px;
        margin-right: 10px;
        color: #fff;
      "></i>
      <span style="
        color: #fff;
        font-size: 16px;
      ">${text}</span>
    </div>
    `
    el.style.position = 'relative'
    el.appendChild(div)
  },

  update(el, binding) {
    if (binding.value) {
      el.querySelector('.loading').style.display = 'flex'
    } else {
      el.querySelector('.loading').style.display = 'none'
    }
  },

  unbind(el) {
    const loading = el.querySelector('.loading')
    if (loading) {
      el.removeChild(loading)
    }
  }
})

使用自定义指令实现的效果如下:

<template>
  <div v-loading="loading">
    ...
    <button @click="getData">获取数据</button>
    ...
  </div>
</template>

<script>
export default {
  data() {
    return {
      loading: false
    }
  },
  methods: {
    async getData() {
      try {
        this.loading = true
        const res = await fetchData()
        // do something with res
      } catch (err) {
        console.log(err)
      } finally {
        this.loading = false
      }
    }
  }
}
</script>

这样,在组件中使用 v-loading 指令即可实现加载状态的展示和隐藏。

至此,这就是实现 Vue 中加载中状态的完整攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 实现element-ui中的加载中状态 - Python技术站

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

相关文章

  • vue element封装form表单的实现

    让我们来详细讲解一下“vue element封装form表单的实现”的完整攻略。 确定需求 在封装form表单之前,需要先确定需求,包括要封装的表单项、表单验证方式等。 安装依赖 使用vue element库来构建我们的表单组件,需要先安装它。可以使用以下命令进行安装: npm install element-ui -S 创建表单组件 在项目中创建一个新的组…

    other 2023年6月25日
    00
  • lwm2m协议

    lwm2m协议 简介 lwm2m(Lightweight M2M)协议是一种针对IoT设备和传感器的轻量级管理协议,其目的是为了实现设备的远程监测、配置、控制和固件更新。lwm2m协议的设计目标是可扩展性、安全性和非常低的通信开销。该协议基于CoAP(Constrained Application Protocol)协议,使用RESTful API接口实现对…

    其他 2023年3月29日
    00
  • HTML (css样式规范)必看篇

    请听我详细讲解“HTML (CSS样式规范)必看篇”的完整攻略。 HTML规范 标签使用 在HTML中,标签的使用直接影响到页面的结构和表现效果。为了保证页面的正确性和可读性,我们需要遵循HTML标签的使用规范,具体如下: 每个标签都应该正确地嵌套,避免出现标签未闭合、嵌套不合法等问题; 标签名应该使用小写字母; 使用标签时应该为其添加适当的属性,如img标…

    other 2023年6月27日
    00
  • C++读取文件的四种方式总结

    当我们需要读取文件时,可以使用以下四种方式: 1. 使用 C++ 标准库库函数 我们可以使用 ifstream 类和其对象读取文件内容,需要包含头文件 <fstream>。 #include <fstream> #include <iostream> using namespace std; int main() { if…

    other 2023年6月26日
    00
  • apache中使用.htaccess文件缓存图片的配置方法

    在 Apache 中使用 .htaccess 文件缓存图片是一种优化网站性能和提高用户体验的方法。下面是完整的攻略: 配置 Apache 开启 mod_expires 模块 在使用 .htaccess 文件缓存图片之前,需要在 Apache 中开启 mod_expires 模块。可以通过执行以下命令启用: a2enmod expires 在 .htacces…

    other 2023年6月27日
    00
  • 魔兽世界wlk怀旧服狂暴战堆什么属性 狂暴战属性优先级选择攻略

    魔兽世界WLK怀旧服狂暴战属性优先级选择攻略 狂暴战是一个拥有高输出和高生存能力的职业,怎样选择正确的属性以达到最大的输出和生存能力呢?以下是狂暴战属性优先级的选择攻略。 第一条:力量 在坦克和输出型的狂暴战中,力量都是最重要的属性之一。每提高一点力量,你的攻击强度也会随着提高。并且,狂暴战的许多技能和天赋会根据你的力量值来增加其效果值。 示例说明 下面是一…

    other 2023年6月27日
    00
  • ionic4核心概念

    Ionic4核心概念 什么是Ionic4? Ionic4是一个基于Web技术构建混合移动应用的开源框架。它利用Angular框架打造出前端组件、服务和导航等可复用的UI组件、包括手势控制、文字编辑、上传图片等。Ionic4还提供了Native API的访问,支持Cordova和Capacitor。通过Ionic CLI,可以轻松地创建、构建、测试、调试和部署…

    其他 2023年3月28日
    00
  • Android开发之TextView控件用法实例总结

    Android开发之TextView控件用法实例总结 1. 介绍 TextView是Android中最简单也是最常用的控件之一,它用于在屏幕上显示文本信息。本篇文章将介绍TextView控件的基本用法以及常见的属性设置。 2. 属性设置 以下是TextView常用的属性设置: text:设置TextView显示的文字。 textColor:设置TextVie…

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