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读取ASP设定的COOKIE
Nov 24 Javascript
JavaScript Accessor实现说明
Dec 06 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
May 30 Javascript
顶部缓冲下拉菜单导航特效的JS代码
Aug 27 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
jQuery事件详解
Feb 23 Javascript
angular中使用Socket.io实例代码
Jun 03 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
使用Node.js在深度学习中做图片预处理的方法
Sep 18 Javascript
vue弹出框组件封装实例代码
Oct 31 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
Jan 26 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
JQuery 操作select标签实现代码
2010/05/14 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
TensorFlow变量管理详解
2018/03/10 Python
Python如何调用外部系统命令
2019/08/07 Python
详解Python3 pickle模块用法
2019/09/16 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
环保建议书100字
2014/05/14 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
话题作文之关于呼唤
2019/11/29 职场文书