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 相关文章推荐
XENON基于JSON变种
Jul 27 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
Sep 19 Javascript
关于jquery的多个选择器的使用示例
Oct 18 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
打造自己的jQuery插件入门教程
Sep 23 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
Dec 19 Javascript
原生的强大DOM选择器querySelector介绍
Dec 21 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
解决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实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python计算日期之间的放假日期
2018/06/05 Python
Python subprocess模块常见用法分析
2018/06/12 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
python小项目之五子棋游戏
2019/12/26 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
Python实现验证码识别
2020/06/15 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
python dict如何定义
2020/09/02 Python
Python实现冒泡排序算法的完整实例
2020/11/04 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
2014年宣传工作总结
2014/11/18 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP