本组件作用在页面加载完成前进行loader提示,提升用户体验,只需要在app.vue中引用一次,整个项目中路由切换时就可以自动进行提示(vuex版);

1. 添加vuex值和方法;
import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
state: {
isLoading: false
},
mutations: {
// 控制loading显示隐藏
updateLoadingStatus(state, payload) {
state.isLoading = payload.isLoading
}
},
getters: {},
actions: {}
})

19
19
 
1
import Vue from 'vue'
2
import Vuex from 'vuex'
3

4
Vue.use(Vuex)
5

6
export default new Vuex.Store({
7
  state: {
8
    isLoading: false
9
  },
10
  mutations: {
11
    // 控制loading显示隐藏
12
    updateLoadingStatus(state, payload) {
13
      state.isLoading = payload.isLoading
14
    }
15
  },
16
  getters: {},
17
  actions: {}
18
})
19


2. 将vuex添加到vue实例中供全局调用
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store' Vue.config.productionTip = false /* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
})
15
15
 
1
import Vue from 'vue'
2
import App from './App'
3
import router from './router'
4
import store from './store'
5

6
Vue.config.productionTip = false
7

8
/* eslint-disable no-new */
9
new Vue({
10
  el: '#app',
11
  router,
12
  store,
13
  components: { App },
14
  template: '<App/>'
15
})

3. 修改vue-router,利用router事件钩子,操作控制loader组件的值
import Vue from 'vue'
import Router from 'vue-router'
import store from '../store/index'
import HelloWorld from '@/components/HelloWorld' Vue.use(Router) const routes = [
{
path: '/',
name: 'HelloWorld',
component: HelloWorld
}
] // 实例化路由
const router = new Router({
routes
}) // 路由跳转前的钩子
router.beforeEach(function (to, from, next) {
store.commit('updateLoadingStatus', {isLoading: true})
next()
}) // 路由跳转后的钩子
router.afterEach(function (to) {
store.commit('updateLoadingStatus', {isLoading: false})
}) export default router
32
32
 
1
import Vue from 'vue'
2
import Router from 'vue-router'
3
import store from '../store/index'
4
import HelloWorld from '@/components/HelloWorld'
5

6
Vue.use(Router)
7

8
const routes = [
9
  {
10
    path: '/',
11
    name: 'HelloWorld',
12
    component: HelloWorld
13
  }
14
]
15

16
// 实例化路由
17
const router = new Router({
18
  routes
19
})
20

21
// 路由跳转前的钩子
22
router.beforeEach(function (to, from, next) {
23
  store.commit('updateLoadingStatus', {isLoading: true})
24
  next()
25
})
26

27
// 路由跳转后的钩子
28
router.afterEach(function (to) {
29
  store.commit('updateLoadingStatus', {isLoading: false})
30
})
31

32
export default router

4. 在app.js中使用loader组件,最需要注意的一点,控制组件显示的变量,需要通过v-model来与组件绑定(如下第六行)
<template>
<div id="app">
{{isLoading}}
<img src="./assets/logo.png">
<router-view/>
<loading v-model="isLoading"></loading>
</div>
</template> <script>
import {mapState} from 'vuex'
import loading from './components/loading/loading.vue' export default {
name: 'App',
components: {
loading
},
computed: {
...mapState({
isLoading: state => state.isLoading
})
}
}
</script>
25
 
1
<template>
2
  <div id="app">
3
    {{isLoading}}
4
    <img src="./assets/logo.png">
5
    <router-view/>
6
    <loading v-model="isLoading"></loading>
7
  </div>
8
</template>
9

10
<script>
11
  import {mapState} from 'vuex'
12
  import loading from './components/loading/loading.vue'
13

14
  export default {
15
    name: 'App',
16
    components: {
17
      loading
18
    },
19
    computed: {
20
      ...mapState({
21
        isLoading: state => state.isLoading
22
      })
23
    }
24
  }
25
</script>




















vue全局loading组件的更多相关文章

  1. [vue开发记录]全局loading组件

    上图不上种,菊花万人捅: loading.js: import './loading.css' let Loading = {} // 避免重复install,设立flag Loading.insta ...

  2. vue 全局自定义组件

    1.vue文件 <template> <div style="position: absolute;bottom: 10px;text-align: center;widt ...

  3. Vue全局添加组件或者模块

    import Api from './api.js' export default { install (Vue) { Vue.prototype.$Api = Api } } 这种格式就可以在mai ...

  4. vue 全局挂载组件

    <!-- plugin.js --> import someComponent from './components/someComponent' export default { ins ...

  5. 自定义vue全局组件use使用

    自定义一个全局Loading组件,并使用:总结目录:|-components |-loading |-index.js 导出组件,并且install |-loading.vue 定义Loading组件 ...

  6. 自定义vue全局组件use使用(解释vue.use()的原理)

    我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们就来讲解一下怎么样定义一个全局组件,并解释vue.use()的 ...

  7. 自定义vue全局组件use使用、vuex的使用

    自定义vue全局组件use使用(解释vue.use()的原理)我们在前面学习到是用别人的组件:Vue.use(VueRouter).Vue.use(Mint)等等.其实使用的这些都是全剧组件,这里我们 ...

  8. vue插件 使用use注册Vue全局组件和全局指令

    插件一般会注册到全局使用 官方编辑插件介绍:https://vuefe.cn/v2/guide/plugins.html 全局组件: .首先建一个自定义组件的文件夹,比如叫loading,里面有一个i ...

  9. vue 全局组件【原】

    1.目录 2.内容 -Loading.vue <template> <div class="loading"> loading... </div> ...

随机推荐

  1. Java 文件路径的读取

    记得在操作系统中了解到文件读取有两种方式,当然这在各编程语言中也是通用的,所以java路径也分,相对和绝对路径. 绝对路径 绝对路径URI ,听着和URL非常相似.那我们就来看看吧. URI(Unif ...

  2. UVa 10773 - Back to Intermediate Math

    题目:渡河问题.给你河水宽度,水流速度,求垂直渡河与最快渡河的时间差. 分析:物理题,数学题. 最快渡河情况,传垂直运动,垂直渡河,船的水平分速度和水流速度抵消. 说明:注意水流速度不能为0. #in ...

  3. C#中,变量前的@符号

    看别人写的C#代码,发现有变量前带@,啥意思? string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling& ...

  4. Hibernate 之 一级缓存

    本篇文章主要是总结Hibernate中关于缓存的相关内容. 先来看看什么是缓存,我们这里所说的缓存主要是指应用程序与物流数据源之间(例如硬盘),用于存放临时数据的内存区域,这样做的目的是为了减少应用程 ...

  5. BZOJ1016 &amp;&amp; JSOI2008] 最小生成树计数

    题目链接:id=1016">点击打开链接 裸题 #pragma comment(linker, "/STACK:1024000000,1024000000") #i ...

  6. mysql03---触发器

    触发器trigger:某条数据改变,希望其他数据也改变(一张表的数据改变,另一张表的数据也变).监测insert,update,delete.能够监测增删改并出发增删改. 监测点(table)监测事件 ...

  7. c语言中 %p的含义【转】

    本文转载自:http://blog.csdn.net/creat2012/article/details/44224217 今天看到了一个%p,表示没有看到过. = =.学习了. 格式控制符“%p”中 ...

  8. Android沉浸式状态栏(透明状态栏)最佳实现

    Android沉浸式状态栏(透明状态栏)最佳实现 在Android4.4之前,我们的应用没法改变手机的状态栏颜色,当我们打开应用时,会出现上图中左侧的画面,在屏幕的顶部有一条黑色的状态栏,和应用的风格 ...

  9. Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard http://silverlightchina.net/html/tips/2010/0329/934.html

    Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard 时间:2010-03-29 11:13来源:SilverlightChina.Net 作者:jv9 点击: ...

  10. windows系统下mysql5.5查看和设置数据库编码

    1.显示当前编码命令: show variables like 'char%'; 2.设置编码为utf8命令:set names 'utf8';