vue路由守衛有三種,分別為:1、全域守衛「router.beforeEach」;2、元件內的守衛「beforeRouteEnter」;3、路由獨享守衛「beforeEnter」。
vue中路由守衛一共有三種,一個全域路由守衛,一個是元件內路由守衛,一個是路由獨享守衛。
所謂的路由守衛可以簡單的理解為一座房子的門口的保安,想要進入這個房子就必須通過保安的檢查,要告訴路由守衛你從哪裡來?總不能隨便陌生人就給放進去?要到哪裡去?然後保安再告訴你下一步該怎麼做?如果你的確是這個房子主人允許進入的人,那就讓你進入,否則就要打電話給房子主人,跟房主商量(登入註冊),給你權限。
// 通过这个匹配判断是否有该权限或要求,这个一般作为页面权限设置,比如哪些页面需要登录才能进入,哪些不需要 to.matched.some(res => res.meta.requireAuth)
router.beforeEach((to,from,next)=>{ if(to.path == '/login' || to.path == '/register'){ next(); }else{ alert('您还没有登录,请先登录'); next('/login'); } })
router.afterEach((to,from)=>{ alert("after each"); })
beforeRouteEnter:(to,from,next)=>{ alert("hello" this.name); }
進行存取admin頁面,會發現alert輸出hello undefined
。這是因為,現在存取不到我們的data屬性,執行順序是不一致,這與的宣告週期有關。在執行完之前,data資料還未渲染。所以這裡,next()會給予一個對應的回調,幫助完成。 <script> export default { data(){ return{ name:"Arya" } }, beforeRouteEnter:(to,from,next)=>{ next(vm=>{ alert("hello" + vm.name); }) } } </script>
beforeRouteLeave:(to,from,next)=>{ if(confirm("确定离开此页面吗?") == true){ next(); }else{ next(false); } }
相關推薦:
更多程式設計相關知識,請造訪:程式設計學習課程! !
以上是vue路由守衛哪幾種?的詳細內容。更多資訊請關注PHP中文網其他相關文章!