以下方法需要引入vuex,另使用了vux的UI框架,ajax添加loading还引入了axios。

一、为页面切换添加loading。

  loading.js:

import Vue from 'vue'
import Vuex from 'vuex'
import router from './router' Vue.use(Vuex) const store = new Vuex.Store({}) // 这里你可能已经有其他 module store.registerModule('myVux', { // 名字自己定义
state: {
isLoading: false
},
mutations: {
updateLoadingStatus (state, payload) {
state.isLoading = payload.isLoading
}
}
})
router.beforeEach(function (to, from, next) {
store.commit('updateLoadingStatus', {isLoading: true})
next()
}) router.afterEach(function (to) {
store.commit('updateLoadingStatus', {isLoading: false})
}) export default store;

  main.js

import Vue from 'vue'
import Vuex from 'vuex'
import App from './App'
import router from './router'
import store from './loading' Vue.use(Vuex)
Vue.use(router) new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: {
App
}
})

  App.vue:

//在模板中加入以下vux组件
<loading :text="loadText" v-model="isLoading"></loading> import { Loading } from 'vux'
import { mapState } from 'vuex' export default {
name: 'app',
data(){
return {
loadText:"loading"
}
},
components: {
Loading
},
computed:{
...mapState({
isLoading: state => state.myVux.isLoading
})
}
}

二、为ajax添加loading(发送请求时显示,返回数据时消失)。

  loading.js:

import Vue from 'vue'
import Vuex from 'vuex' import Axios from 'axios'
 Vue.use(Vuex)
Axios.interceptors.request.use(config => {
console.log('ajax begin request')
store.commit('ajaxStar')
return config;
}) Axios.interceptors.response.use(config => {
console.log('ajax get response')
store.commit('ajaxEnd')
return config
})
store.registerModule('myVux', { // 名字自己定义
state: {
ajaxIsLoading: false
},
mutations: {
ajaxStar (state) {
state.ajaxIsLoading = true
},
ajaxEnd (state) {
state.ajaxIsLoading = false
}
},
getter : {
ajaxIsLoading: state => state.ajaxIsLoading
}
})
export default store;

  main.js

import Vue from 'vue'
import Vuex from 'vuex'
import App from './App'
import router from './router'
import store from './loading' Vue.use(Vuex)
Vue.use(router) new Vue({
el: '#app',
router,
store,
template: '<App/>',
components: {
App
}
})

  App.vue:

//在模板中加入以下vux组件
<loading :text="loadText" v-model="ajaxIsLoading"></loading> import { Loading } from 'vux'
import { mapState } from 'vuex' export default {
name: 'app',
data(){
return {
loadText:"loading"
}
},
components: {
Loading
},
computed:{
...mapState({
    ajaxIsLoading: state => state.myVux.ajaxIsLoading

}) } }

最新文章

  1. HTTP请求 GET与POST是怎么实现?
  2. [py]特殊函数+文件保护
  3. VTK 6.3.0 Qt 5.4 MinGW 4.9.1 Configuration 配置
  4. js笔记---封装一般运动
  5. 网络安全-PGP实现电子邮件加密
  6. 给Sublime Text 2安装CTags插件
  7. .NET序列化的一点技巧
  8. https加密
  9. .NET设计模式系列文章
  10. CSS自学笔记(4):CSS样式表的使用
  11. 新秀nginx源代码分析数据结构篇(两) 双链表ngx_queue_t
  12. CVE-2017-11882漏洞 Msf利用复现
  13. 通过CSS显示垂直文本
  14. CSS基础:替换元素和非替换元素
  15. Java经典面试题+答案(全)
  16. Kendo DropDownListFor值传不回去的小坑
  17. list&lt;实体类&gt;互相嵌套和前台取值问题
  18. MSSQL 表修复语句
  19. paloalto防火墙注册
  20. 通过spring抽象路由数据源+MyBatis拦截器实现数据库自动读写分离

热门文章

  1. MySql数据查询的逻辑蕴含条件问题
  2. C++中的友元小结
  3. struts2的package和result的标签的属性
  4. servlet与filter的加载顺序详解
  5. 项目中gulp使用发生的错误及解决
  6. restfull知识点
  7. [USACO1.4]等差数列 Arithmetic Progressions
  8. css3中的变形(transform)、过渡(transtion)、动画(animation)
  9. Linux 查询服务器序列号命令
  10. Eugeny and Array(水题,注意题目描述即可)