這篇文章將為大家詳細講解有關Vuerouter中beforeEach與afterEach函數(shù)有什么區(qū)別,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
扶余網(wǎng)站建設公司創(chuàng)新互聯(lián),扶余網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為扶余數(shù)千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的扶余做網(wǎng)站的公司定做!
定義:路由鉤子主要是給使用者在路由發(fā)生變化時進行一些特殊的處理而定義的函數(shù)。
總體來講vue里面提供了三大類鉤子,兩種函數(shù)
1、全局鉤子
2、某個路由的鉤子
3、組件內(nèi)鉤子
兩種函數(shù):
1、Vue.beforeEach(function(to,form,next){}) /*在跳轉之前執(zhí)行*/
2.Vue.afterEach(function(to,form))/*在跳轉之后判斷*/
全局鉤子函數(shù)
顧名思義,它是對全局有效的一個函數(shù)
router.beforeEach((to, from, next) => { let token = router.app.$storage.fetch("token"); let needAuth = to.matched.some(item => item.meta.login); if(!token && needAuth) return next({path: "/login"}); next(); });
beforeEach函數(shù)有三個參數(shù):
to:router即將進入的路由對象
from:當前導航即將離開的路由
next:Function,進行管道中的一個鉤子,如果執(zhí)行完了,則導航的狀態(tài)就是 confirmed (確認的);否則為false,終止導航。
afterEach函數(shù)不用傳next()函數(shù)
某個路由的鉤子函數(shù)
顧名思義,它是寫在某個路由里頭的函數(shù),本質(zhì)上跟組件內(nèi)函數(shù)沒有區(qū)別。
const router = new VueRouter({ routes: [ { path: '/login', component: Login, beforeEnter: (to, from, next) => { // ... }, beforeLeave: (to, from, next) => { // ... } } ] })
路由組件的鉤子
注意:這里說的是路由組件!
路由組件 屬于 組件,但組件 不等同于 路由組件!所謂的路由組件:直接定義在router中component處的組件。如:
var routes = [ { path:'/home', component:home, name:"home" } ]
在子組件中調(diào)用路由的鉤子函數(shù)時無效的。
在官方文檔上是這樣定義的:
可以在路由組件內(nèi)直接定義以下路由導航鉤子
beforeRouteEnter
beforeRouteUpdate (2.2 新增)
beforeRouteLeave
這里簡單說下鉤子函數(shù)的用法:它是和data,methods平級的。
beforeRouteLeave(to, from, next) { next() }, beforeRouteEnter(to, from, next) { next() }, beforeRouteUpdate(to, from, next) { next() }, data:{}, method: {}
PS:在使用vue-router beforeEach鉤子時,你也許會遇到如下問題:
源碼:
router.beforeEach((to, from, next) => { //判斷登錄狀態(tài)簡單實例 var userInfo = window.localStorage.getItem('token'); if (userInfo) { next(); } else { next('/login'); } })
然后你會發(fā)現(xiàn)出現(xiàn)如下錯誤:出現(xiàn)dead loop錯誤
解決方案:
router.beforeEach((to, from, next) => { var userInfo = window.localStorage.getItem('token');//獲取瀏覽器緩存的用戶信息 if(userInfo){ //如果有就直接到首頁咯 next(); } else { if(to.path=='/login'){ //如果是登錄頁面路徑,就直接next() next(); } else { //不然就跳轉到登錄; next('/login'); } } })
關于Vuerouter中beforeEach與afterEach函數(shù)有什么區(qū)別就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章標題:Vuerouter中beforeEach與afterEach函數(shù)有什么區(qū)別
當前路徑:http://aaarwkj.com/article34/igidse.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、做網(wǎng)站、網(wǎng)站營銷、電子商務、品牌網(wǎng)站建設、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)