3.9
This commit is contained in:
parent
c94b8ded42
commit
1ada19f4e4
32
src/main.js
32
src/main.js
@ -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({
|
||||||
|
@ -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>
|
||||||
|
BIN
导航守卫.xmind
BIN
导航守卫.xmind
Binary file not shown.
Loading…
Reference in New Issue
Block a user