视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue 项目中使用Loading组件的示例代码
2020-11-27 22:08:53 责编:小采
文档

什么是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>

下载本文
显示全文
专题