vue 项目中使用Loading组件的示例代码


Posted in Javascript onAugust 31, 2018

什么是vue插件?

从功能上说,插件是为Vue添加全局功能的一种机制,比如给Vue添加一个全局组件,全局指令等;

从代码结构上说,插件就是一个必须拥有install方法的对象,这个方法的接收的第一个参数是Vue构造函数,还可以接收一个可选的参数,用于配置插件:

var myplugin = {
install:function(Vue, options){
...
}
}

从意义上来说,正如jQuery的$.fn使jQuery有了一个庞大的生态一样,Vue的插件机制使Vue形成了一个生态系统,你可以开发一个插件给别人复用。

当在vue项目中请求后台接口时,常常会使用 loding 过渡数据的加载时间。

如果 loading 作为一个全局的加载状态,应该写在项目中的App.vue中

<template>
  <div id="app">
    <router-view></router-view>
    <loading v-if='LOADING'/> //自己封装的loading 组件
  </div>
</template>

<script>
  export default {
    name: 'App'
  }
</script>

这个Loading 组件通过 LOADING 的状态显示隐藏。我们希望在请求某个接口的时候,将 LOADING 改为true,当接口请求后改为false,这样就能实现loading的过渡效果了。

但是这里有一个问题,loading组件的显示和隐藏是通过 LOADING 来控制的, 如果将 LOADING 直接定义在 App.vue 中,每次请求中直接修改 LOADING 是很麻烦的,所以推荐使用 vuex

第一步:按照官网的例子,在App.vue的同层目录下新建一个 store.js 文件.

// store.js
const store = new Vuex.Store({
  state: {
    LOADING: false
  },
  mutations: {
    showLoading(state){
      state.LOADING = true  
    },
    hideLoading (state) {
      state.LOADING = false
    }
  }
})

第二步: 在 main.js 中引入 store.js,并挂载到 Vue 实列上

import store from './store'

new Vue({
  el: '#app',
  store,
  template: '<App/>',
  components: { App }
})

第三步,在请求中改变 LOADING 的状态

Vue 项目中 API 的请求方法有很多,如果项目比较简单,数据量比较小,可以在在页面中直接使用像 axios、ajax、request等的 post/get 请求。以 axios 为例:

methods:{
  //通常请求都希望以异步的方式,方便数据操作
  async test(){
    this.$store.commit('showLoading')
    //这里需要将 axios 提前挂载到 Vue的属性上。
    await this.$axios.get('xxx/xxxx/xxx')
    this.$store.commit('hideLoading')
  }
}

第四步: 监听 LOADING 状态

Vuex 中 state 是动态更新的,也就是不管在任何地方对某一个 state的值做了修改,那么依赖该数据的 DOM 也将会发生改变。修改 App.vue 文件,监听 LOADING 的值的变化。

<template>
  <div id="app">
    <router-view></router-view>
    <loading v-if='LOADING'/> //自己封装的loading 组件
  </div>
</template>

<script>
  import {mapState} from 'vuex'

  export default {
    computed:{
      ...mapState([
        'LOADING'
      ])
    },
    name: 'App'
  }
</script>

总结:

loading的过渡效果最根本的就是通过 state 来控制 loading 组件的显示和隐藏。在请求接口前使该状态为 为 true,接口完成后改为 false。

简单的 loading 组件

一个简单的 loading 组件,应该会有一个遮罩层,一个过度动画,或者一个loading 说明。

<template>
  <section>
    <div class='mock'>
      <div class='main'>
        loading...
      </div>
    </div>
  </section>
</template>  
<style>
  section{
    width:100vh;
    height:100vh;
    position:relative;
  }
  .mock{
    tion{
    width:100vh;
    height:100vh;
    position:absolute;
     z-index:100;
    background-color:#abb2bf;
  }
  .main{
    margin:200px auto;
    text-align:center:
  }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
Apr 29 Javascript
JavaScript中的Screen屏幕对象
Jan 16 Javascript
JavaScript Chart 插件整理
Jun 18 Javascript
重写document.write实现无阻塞加载js广告(补充)
Dec 12 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 Javascript
关于Bootstrap按钮组件消除黄框的方法
May 19 Javascript
vue-cli创建的项目,配置多页面的实现方法
Mar 15 Javascript
JSX在render函数中的应用详解
Sep 04 Javascript
layui lay-verify form表单自定义验证规则详解
Sep 18 Javascript
浅谈Vue SSR中的Bundle的具有使用
Nov 21 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 #Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 #Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
Aug 31 #Javascript
Angular2之二级路由详解
Aug 31 #Javascript
基于jQuery ztree实现表格风格的树状结构
Aug 31 #jQuery
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
Aug 31 #Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 #Javascript
You might like
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
jquery tools 系列 scrollable学习
2009/09/06 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
2015/08/04 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
python实现126邮箱发送邮件
2020/05/20 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
Python高并发和多线程有什么关系
2020/11/14 Python
python安装sklearn模块的方法详解
2020/11/28 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
请假条的格式
2014/04/11 职场文书
个人借款协议书范本
2014/11/17 职场文书
大学生英文求职信范文
2015/03/19 职场文书
小学总务工作总结
2015/08/13 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技