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 相关文章推荐
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
Dec 26 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
Python脚本后台运行的几种方式
Mar 09 Javascript
JS动态显示表格上下frame的方法
Mar 31 Javascript
最常见的左侧分类菜单栏jQuery实现代码
Nov 28 Javascript
js实现自定义路由
Feb 04 Javascript
jQuery开源组件BootstrapValidator使用详解
Jun 29 jQuery
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
详解组件库的webpack构建速度优化
Jun 18 Javascript
vue项目中引入vue-datepicker插件的详解
May 14 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
Sep 17 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
2019/10/30 PHP
Array对象方法参考
2006/10/03 Javascript
JavaScript类库D
2010/10/24 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
python操作gmail实例
2015/01/14 Python
Python中random模块生成随机数详解
2016/03/10 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
python如何爬取动态网站
2020/09/09 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
给女儿的表扬信
2014/01/18 职场文书
分家协议书
2014/04/21 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
员工手册编写范本
2015/05/14 职场文书
警示教育观后感
2015/06/17 职场文书
2016年小学生寒假总结
2015/10/10 职场文书