页面切换显示loading

移动端如果使用异步组件加载那么还是需要一点等待时间的,在网络慢时等待时间会更长。显示Loading状态缓解一下用户等待情绪就十分重要。

如果你使用vue-routervuex,那么可以很容易实现。

首先,注册一个module来保存状态

  1. const store = new Vuex.Store({}) // 这里你可能已经有其他 module
  2. store.registerModule('vux', { // 名字自己定义
  3. state: {
  4. isLoading: false
  5. },
  6. mutations: {
  7. updateLoadingStatus (state, payload) {
  8. state.isLoading = payload.isLoading
  9. }
  10. }
  11. })

然后使用vue-routerbeforeEachafterEach来更改loading状态

  1. router.beforeEach(function (to, from, next) {
  2. store.commit('updateLoadingStatus', {isLoading: true})
  3. next()
  4. })
  5. router.afterEach(function (to) {
  6. store.commit('updateLoadingStatus', {isLoading: false})
  7. })

App.vue里使用loading组件并从vuex获取isLoading状态

  1. <loading v-model="isLoading"></loading>
  1. import { Loading } from 'vux'
  2. import { mapState } from 'vuex'
  3. export default {
  4. components: {
  5. Loading
  6. },
  7. computed: {
  8. ...mapState({
  9. isLoading: state => state.vux.isLoading
  10. })
  11. }
  12. }

done.

如果你觉得在加载比较快时Loading组件一闪而过体验也不大好,那么你可以延迟设置loading=false