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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
Apr 12 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
jQuery 自定义函数写法分享
Mar 30 Javascript
javascript实现window.print()去除页眉页脚
Dec 30 Javascript
JS实现的竖向折叠菜单代码
Oct 21 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
Nov 07 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
Dec 24 Javascript
JS实现判断图片是否加载完成的方法分析
Jul 31 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 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
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
JS 进度条效果实现代码整理
2011/05/21 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
js友好的时间返回函数
2016/08/24 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
python with statement 进行文件操作指南
2014/08/22 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
数控专业大学生的自我鉴定
2013/11/13 职场文书
3的组成教学反思
2014/04/30 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
保险内勤岗位职责
2015/04/13 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
MySQL数据库之存储过程 procedure
2022/06/16 MySQL