全局鉤子函數(shù):
beforeEach:
beforeEach一共接收三個參數(shù),分別是to、from、next;to:即將進(jìn)入的路由對象;from:正要離開的路由對象;next:路由的控制參數(shù);
next一共有四種調(diào)用方式:
next():一切正常調(diào)用這個方法進(jìn)入下一個鉤子;
next(false):取消路由導(dǎo)航,這時的url顯示的是正要離開的路由地址;
next('/login'):當(dāng)前路由被終止,進(jìn)入一個新的路由導(dǎo)航(路由地址可以自由指定)
next(error):路由導(dǎo)航終止并且錯誤會被傳遞到router.onError()注冊過的回調(diào)中;
我們一般是用全局鉤子來控制權(quán)限,像什么進(jìn)頁面沒有登錄就跳登錄頁,需要用戶達(dá)到什么級別才能訪問當(dāng)前頁面都是屬于頁面權(quán)限控制,都是可以通過beforeEach鉤子函數(shù)來實現(xiàn)
AfterEach:
AfterEach和beforeEach一樣都是屬于全局守衛(wèi)鉤子,都是在main.js中進(jìn)行調(diào)用;其中AfterEach比beforeEach少一個next參數(shù);
to:即將要進(jìn)入的路由對象;
from:正要離開的路由對象;
afterEach()我們一般用來重置頁面滾動條位置:
假如我們有一個頁面很長,滾動后其中的某個位置后跳轉(zhuǎn),這時新的頁面的滾動條位置就會在上一個頁面停留的位置;這個時候我們就可以利用afterEach進(jìn)行重置:
組件內(nèi)的鉤子函數(shù):
beforeRouteEnter(to,from,next):
在路由進(jìn)入前調(diào)用,因為此時的vue實例還沒有創(chuàng)建,所以beforeEnter是唯一一個不能使用this的鉤子函數(shù);
to:即將要進(jìn)入的路由對象;
from:正要離開的路由對象;
next:路由控制參數(shù)
beforeRouteUpdate(to,from,next):
在路由發(fā)生修改的時候進(jìn)行調(diào)用,比如我們上一篇文章講到的動態(tài)路由傳參,這種情況我們的beforeRouteUpdate也是會被調(diào)用的;
to:即將要進(jìn)入的路由對象;
from:正要離開的路由對象;
next:路由控制參數(shù);
beforeRouteLeave(to,from,next):
在路由離開該組件時調(diào)用;
to:即將要進(jìn)入的路由對象;
from:正要離開的路由對象;
next:路由控制參數(shù)
注意:beforeRouteEnter因為觸發(fā)的時候vue實例還沒有創(chuàng)建,所以這個鉤子函數(shù)中不能使用this,而beforeRouteUpdate和beforeRouteLeave都是可以訪問到實例的,因為當(dāng)這兩個函數(shù)觸發(fā)的時候?qū)嵗家呀?jīng)被創(chuàng)建了;