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 相关文章推荐
使用Java实现简单的server/client回显功能的方法介绍
May 03 Javascript
Javascript实现重力弹跳拖拽运动效果示例
Jun 28 Javascript
为开发者准备的10款最好的jQuery日历插件
Feb 04 Javascript
javascript中style.left和offsetLeft的用法说明
Mar 07 Javascript
javascript引用类型指针的工作方式
Apr 13 Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 Javascript
基于JavaScript实现智能右键菜单
Mar 02 Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
Nov 07 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
VUE 自定义组件模板的方法详解
Aug 30 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
Jul 31 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
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
Javascript 函数对象的多重身份
2009/06/28 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
JavaScript中while循环的基础使用教程
2020/08/11 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
浅谈MySQL中的触发器
2015/05/05 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
Python flask框架post接口调用示例
2019/07/03 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
贫困生证明范文
2015/06/16 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
Golang 入门 之url 包
2022/05/04 Golang
MySQL添加索引特点及优化问题
2022/07/23 MySQL