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 页面输出值
Nov 30 Javascript
JavaScript的类型简单说明
Sep 03 Javascript
JS中使用sort结合localeCompare实现中文排序实例
Jul 23 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
详解Bootstrap四种图片样式
Jan 04 Javascript
基于原生JS实现图片裁剪
Aug 01 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
浅析javaScript中的浅拷贝和深拷贝
Feb 15 Javascript
mui上拉加载功能实例详解
Apr 13 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
Aug 09 Javascript
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
Python实现简单的四则运算计算器
2016/11/02 Python
深入理解Django的自定义过滤器
2017/10/17 Python
使用python 3实现发送邮件功能
2018/06/15 Python
python处理csv中的空值方法
2018/06/22 Python
transform python环境快速配置方法
2018/09/27 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
css sprite简单实例
2016/05/23 HTML / CSS
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
爷爷追悼会答谢词
2014/01/24 职场文书
实习指导老师评语
2014/04/26 职场文书
保安2014年终工作总结
2014/12/06 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL