vue全局loading組件


本組件作用在頁面加載完成前進行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: {}
})

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/>'
})

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

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>





















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM