每天一点点之vue框架开发 - vue-router路由进阶(路由别名、跳转、默认路由、二级路由、路由守卫)

路由别名
 
在main.js中的路由中添加name来创建别名
const routes = [
    {path:'/footer',name:footerLink,component:Footer}
]

 

在组件中的路由中通过对象属性来实现路由

<router-link :to="{name:homeLink}">Mirror微申</router-link>

 

跳转
 
1.跳转到上一次浏览的页面
this.$router.go(-1)

 

2.跳转到指定路由
this.$router.replace(‘/footer’)
// 还可以通过别名跳转
this.$router.replace({name:’footerLink’})
 
也可以通过push进行
this.$router.push(‘/footer’)
this.$router.push({name:’footerLink’})

 

 
设置默认路由
 
const routes = [
    {path:'/',redirect:'/home'},
    {path:'/home',name:homeLink,component:Home},
]

或者在路由中添加

const routes = [
    {path:'*',redirect:'/'},
]

这样写有两个好处,一个是设置了默认访问路由,还有一个就是当用户在地址栏输入错误的时候跳转到首页

 
二级路由
 
 
 
剥离路由,单独写在一个文件中
 
1.将路由提取到一个文件中,我把它放在了main.js 同目录到 ./assets/js/routes.js
import Home from '../../components/home/Home';
import Footer from "../../components/footer/Footer";

export const routes = [
    { path: '/', name: 'homeLink', component: Home },
    { path: '/footer', name: 'footerLink', component: Footer },
    { path: '*', redirect: '/' },
]

说明,使用 export 将数组暴露出去,import引入组件

 

2.在main.js 中引入路由文件

import { routes } from './assets/js/routes.js'

 

 

路由守卫

1.全局守卫 

// 全局守卫
router.beforeEach((to,from,next)=>{
  if(to.path == '/login' || to.path == '/register'){
    next();
  }else{
    alert("你还没有登录,请先登陆");
    next('/login');
  }
})

参数说明:

  to:去那

  from:到哪里

  next:跳转到哪里,回调函数

 

2.后置钩子

在路由之后出发,其实和全局守卫差不多

router.afterEach((to,from) => {
  alert("后置钩子");
})

 

 3.独享守卫

就是在路由中添加 beforeEnter ,访问其他链接的时候,不会提示,只有在访问特定路由的时候才会触发

{ path: '/blogging', name: 'bloggingLink', component: Blogging ,beforeEnter: (to, from, next) => {
    if(to.path == '/login' || to.path == '/register'){
      next();
    }else{
      alert("你还没有登录,请先登陆");
      next('/login');
    }
  }}, 

 

 4.组件内守卫

就是在组件内进行守卫,不能和路由守卫同用

export default {
    data(){
        return {
            name:'Victor'
        }
    },
    // 组件进入
    beforeRouteEnter (to, from, next) {
        next(vm => {
            alert('Hello ' + this.name)
        })
    },
    // 组件离开
    beforeRouteLeave (to, from, next) {
        if(confirm('确认离开吗?') == true) {
            next();
        }else{
            next(false);
        }
    }
}

说明:在 beforeRouteEnter 中如果想访问data,需要在回调中访问

 

 

 

 

 
 
posted @ 2018-12-11 11:38  我若亦如风  阅读(1656)  评论(0编辑  收藏  举报