場(chǎng)景:vue路由加載頁面時(shí)叠艳,數(shù)據(jù)加載慢的時(shí)候頁面會(huì)有閃動(dòng)的效果徐矩,數(shù)據(jù)加載前和加載后的區(qū)別掐隐。(特別是el-table表格數(shù)據(jù))
思路:路由前加載數(shù)據(jù),等數(shù)據(jù)加載完再路由渲染頁面
解決方案:使用vue-router的路由守衛(wèi)beforeRouteEnter
組件內(nèi)直接定義以下路由導(dǎo)航守衛(wèi)驰怎,和鉤子函數(shù)的寫法一樣阐滩,下面列出三種路由守衛(wèi):
beforeRouteEnter(to,from,next)0{
// 在渲染該組件的對(duì)應(yīng)路由被 confirm 前調(diào)用// 不!能县忌!獲取組件實(shí)例 `this`
// 因?yàn)楫?dāng)守衛(wèi)執(zhí)行前掂榔,組件實(shí)例還沒被創(chuàng)建
},
beforeRouteUpdate(to,from,next){
// 在當(dāng)前路由改變继效,但是該組件被復(fù)用時(shí)調(diào)用
// 舉例來說,對(duì)于一個(gè)帶有動(dòng)態(tài)參數(shù)的路徑 /foo/:id装获,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時(shí)候瑞信,
// 由于會(huì)渲染同樣的 Foo 組件,因此組件實(shí)例會(huì)被復(fù)用穴豫。而這個(gè)鉤子就會(huì)在這個(gè)情況下被調(diào)用凡简。
// 可以訪問組件實(shí)例 `this`
},
beforeRouteLeave(to,from,next){
// 導(dǎo)航離開該組件的對(duì)應(yīng)路由時(shí)調(diào)用// 可以訪問組件實(shí)例 `this`
}
vue-router講的含詳細(xì),具體訪問:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E7%BB%84%E4%BB%B6%E5%86%85%E7%9A%84%E5%AE%88%E5%8D%AB
https://router.vuejs.org/zh/guide/advanced/data-fetching.html#%E5%AF%BC%E8%88%AA%E5%AE%8C%E6%88%90%E5%90%8E%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE