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系列(1) 编写高质量JavaScript代码的基本要点
Jan 15 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
JavaScript实现复制内容到粘贴板代码
Mar 31 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
js与applet相互调用的方法
Jun 22 Javascript
AngularJs Managing Service Dependencies详解
Sep 02 Javascript
JS简单去除数组中重复项的方法
Sep 13 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
Sep 25 Javascript
Node.js实现简单的爬取的示例代码
Jun 25 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实现异步调用方法研究与分享
2011/10/27 PHP
如何让CI框架支持service层
2014/10/29 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
php微信公众号开发模式详解
2016/11/28 PHP
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
javascript操作符&quot;!~&quot;详解
2015/02/10 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
python实现保存网页到本地示例
2014/03/16 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python lambda的使用详解
2021/02/26 Python
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
一封普通求职者的求职信
2013/11/20 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
保护环境建议书100字
2014/05/13 职场文书
环保志愿者活动总结
2014/06/27 职场文书
实习报告范文
2019/07/30 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
使用Pytorch训练two-head网络的操作
2021/05/28 Python
DSP接收机前端设想
2022/04/05 无线电