This commit is contained in:
Savior 2022-03-09 18:25:21 +08:00
parent c94b8ded42
commit 1ada19f4e4
3 changed files with 51 additions and 5 deletions

View File

@ -22,18 +22,27 @@ const routes = [
component:() => import("./pages/nav.vue"), component:() => import("./pages/nav.vue"),
children:[{ children:[{
path:"user", path:"user",
component: () => import("./pages/user.vue") // 自己定义的东西,在路由跳转时用来判断是否允许跳转
meta:"user",
component: () => import("./pages/user.vue"),
// path:"/user", // path:"/user",
// component: () => import("./pages/user.vue") // component: () => import("./pages/user.vue")
// 加了'/'就是绝对路径 后面不需要写父级路径 @click="$router.push('/user')" // 加了'/'就是绝对路径 后面不需要写父级路径 @click="$router.push('/user')"
// 不加'/'就是相对路径 后面就需要写父级路径 @click="$router.push('/nav/user') // 不加'/'就是相对路径 后面就需要写父级路径 @click="$router.push('/nav/user')
beforeEnter: (to,from,next) => {
console.log("这是路由独享守卫")
next()
// 给特定路由的守卫如果不加next则无法跳转到当前页面在前置导航守卫后被执行
}
}, },
{ {
path:"/", path:"/",
meta:"index",
component: index component: index
}, },
{ {
path:"aaa", path:"aaa",
meta:"aaa",
component: () => import("./components/aaa.vue") component: () => import("./components/aaa.vue")
}, },
], ],
@ -41,24 +50,37 @@ const routes = [
] ]
const router = new VueRouter({ const router = new VueRouter({
mode:"history",
routes // (缩写) 相当于 routes: routes routes // (缩写) 相当于 routes: routes
}) })
// 这个函数在页面跳转的时候,自动被执行,这就是导航守卫 // 这个函数在页面刚要跳转的时候,自动被执行,这就是前置导航守卫
router.beforeEach((to,from,next) => { router.beforeEach((to,from,next) => {
// to中的path显示的是当前的路径 // to中的path显示的是当前的路径
console.log(to) console.log(to)
// from中的path显示的是跳转到当前路径的之前的路径 // from中的path显示的是跳转到当前路径的之前的路径
console.log(from) console.log(from)
console.log("这是导航守卫") console.log("这是前置导航守卫")
next()
// next控制页面的跳转 // next控制页面的跳转
// next() // next()
if(to.path != "/nav"){ /* if(to.path != "/nav"){
console.log("执行next") console.log("执行next")
next() next()
}else{ }else{
alert("无法访问") alert("无法访问")
} } */
})
// 这个函数在页面准备要跳转的时候,自动被执行,这就是全局解析守卫,在前置导航守卫后被执行
router.beforeResolve((to,from,next) => {
console.log("这是全局解析守卫")
next()
})
// 这个函数在页面完成跳转后自动被执行因为已经跳转完了所以不需要next叫全局后置钩子
router.afterEach(() => {
console.log("跳转完成了")
}) })
new Vue({ new Vue({

View File

@ -48,6 +48,30 @@
<script> <script>
export default { export default {
name:"navPage", name:"navPage",
//
beforeRouteEnter(to, from, next) {
// confirm
// `this`
//
console.log("组件渲染")
next()
},
//
beforeRouteUpdate(to, from, next) {
//
// /foo/:id /foo/1 /foo/2
// Foo
// 访 `this`
console.log("组件复用")
next()
},
// 使
beforeRouteLeave(to, from, next) {
//
// 访 `this`
console.log("组件离开")
next()
}
} }
</script> </script>
<style scoped> <style scoped>

Binary file not shown.