[英]Wait for some time before showing loading screen VueJS
在VueJS中 ,我將每條路線上的加載程序顯示為:
router.beforeEach((to, from, next) => {
store.commit('loading', true);
next();
})
但是,如果服務器在不到一秒鍾的時間內加載頁面,那么僅顯示一秒鍾的時間就很奇怪,無法顯示該請求的加載器。
我要等待一段時間,只要說2秒,也許3秒,畢竟,如果頁面尚未加載,則顯示加載器,否則不顯示。 因此,為此,我將setTimeout
為:
router.beforeEach((to, from, next) => {
setTimeout(() => {
store.commit('loading', true);
}, 500);
next();
})
現在總是總是顯示加載器永不消失,然后我也嘗試將next()
語句移到setTimeout
但是隨后頁面首先等待500 mili-sec
然后加載器顯示出來,然后突然隱藏並加載頁面。
我想以更好的方式做出建議,有什么建議嗎?
所以關於你的問題。 截至目前,您只將提交“加載”突變延遲了500毫秒。 要回答您的問題,您應該執行以下操作:
router.beforeEach((to, from, next) => {
store.commit('loading', true);
setTimeout(() => {
store.commit('loading', false);
}, 500);
next();
})
這將延遲提交store.commit('loading', false);
500ms。 問題是您是否真的要錯誤地延遲組件的加載。 在這種情況下,為什么不使用轉換呢?
這是延遲下一條路線加載的示例https://codesandbox.io/s/vue-highcharts-demo-nn3uv
我認為您不了解Vue路由器導航防護。 根據Vue路由器文檔 :
每當觸發導航時,將按創建順序調用全局警戒。 可以異步解決保護措施,並且在解決所有掛鈎之前將導航視為掛起狀態。
簡而言之,只需在執行操作時在beforeEach
顯示加載程序beforeEach
:
store.commit('loading', true);
並將其隱藏在afterEach
為:
store.commit('loading', false);
而已。
不要在
afterEach
添加setTimeout
。
希望它會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.