You can use navigation guards to activate/deactivate a loading state that shows/hides a loading component:
If you would like to use something like “nprogress” you can do it like this:
http://jsfiddle.net/xgrjzsup/2669/
const router = new VueRouter({
routes
})
router.beforeEach((to, from, next) => {
NProgress.start()
next()
})
router.afterEach(() => {
NProgress.done()
})
Alternatively, if you want to show someting in-place:
http://jsfiddle.net/h4x8ebye/1/
Vue.component('loading',{ template: '<div>Loading!</div>'})
const router = new VueRouter({
routes
})
const app = new Vue({
data: { loading: false },
router
}).$mount('#app')
router.beforeEach((to, from, next) => {
app.loading = true
next()
})
router.afterEach(() => {
setTimeout(() => app.loading = false, 1500) // timeout for demo purposes
})
Then in the template:
<loading v-if="$root.loading"></loading>
<router-view v-else></router-view>
That could also be easily encapsulated in a very small component instead of using the $root component for the loading state.