beforeEach的深入研究,及beforeEach和beforeRouteEnter區別?


之前一直困惑它倆的區別,也沒找到合適的文檔,直到有天看到一篇博客,一起來學習下:

之前是在created鈎子函數里面,發現這是在今天當前頁面之后了。先回顧一下鈎子函數beforeEach
const router = new VueRouter({})
router,beforeEach((to,from,next) =>{
const {auth = true } =meta // meta代表的是to中的meta對象
var isLogin = Boolean(state.state.user.id) // true 用戶已登錄,false 用戶未登錄
if(auth && !islogin && path !=='/login'){
return next({path:'/login'}) // 跳轉到login頁面
}
next() // 進行下一個鈎子函數
})
這個beforeEach的鈎子函數,它是一個全局的before 鈎子函數, (before each)意思是在 每次每一個路由改變的時候都得執行一遍。
組件內的鈎子函數 ( beforeRouteEnter 和 beforeRouteLeave 再加一個watch)

在vue2.x中

1)最先執行的是 beforeEach鈎子,所有路由開始的時候最先執行
2)然后就是router的配置中的beforeEnter.
3) 接下來就是 路由beforeARouteEnter -- 然后是組件自身的生命周期 -- 路由beforeRouteLeave
beforeRouteEnter (to, from, next) {} 與 beforeRouteLeave不再是組件中route配置下的對象了,他們和data處於同級別的地位。
可以看出: 新設計的路由 淡化了組件自身跟着路由生命周期變化而變化,而是依賴組件自身的生命周期,只有兩個簡單的 路由級別的鈎子 beforeRouteEnter beforeRouteLeave
那么接下來:
  ajax調用時機:相對於組件來說的,而且應該是在路由進入之前開始准備的 所以beforeRouteEnter是調用ajax的時機。 實際項目中一般我是在created鈎子函數中,上面說的沒試過。
watch這一函數可以監聽路由$route變化。beforeRouteLeave在組件的生命周期完成后,且舊路由即將切換走,新路由beforeEach的時機執行。
watch的使用時機:
當使用路由參數時,例如從 /user/foo 導航到 user/bar,原來的組件實例會被復用。因為兩個路由都渲染同個組件,比起銷毀再創建,復用則顯得更加高效。
不過,這也意味着 組件的生命周期鈎子不會再被調用。
復用組件時,想對路由參數的變化作出響應的話,你可以簡單地 watch(監測變化) $route 對象:

參考原文:https://www.cnblogs.com/faith3/p/6224235.html


免責聲明!

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



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