Vue router

137 阅读2分钟

VueRouter是Vue构建单页面应用的官方路由。使用起来也非常方便,在不刷新页面的情况下更改了URl,简单总结一下相关的概念。

组件与显示

<router-link><router-view>配合使用,这里的link相当于一个a标签,而view则是将对应的组件显示出来。可以放在任何地方。

嵌套路由

子组件作为router-view显示在父组件的视图中的同时,也可以拥有下一层组件的router-view。要将孙子组件渲染到这个嵌套的router-view中,我们需要在路由中配置children。 只要在route配置里的component的里加上children对应的组件以及路由,子组件的router-view就可以显示出对应的视图。

history&hash模式

hash模式在实际的url前面使用了一个字符#,这部分url不会被发送到服务器。所以即使没有做到对路由的全覆盖,也不会返回404,但是SEO不友好。 history模式发送的就是完整的url,但是如果缺少对部分路由的配置就会返回404。解决方式是配合后端,增加一个回退路由,对应到index.html。

导航守卫

通过监控路由跳转的过程,在跳转的各个过程执行相应的操作。经常用来实现登录控制。

全局守卫

  • beforeEach beforeEach接受3个参数,to,from,next,可以用于实现登录验证,在路由还没有跳转的时候告知。
router.beforeEach((to,from,next)=>{
  const nextRoute=['api','my/index','xxx']
  if (nextRoute.indexOf(to.name)>=0){
      if(!store.state.auth.isLogin){
          vueRouter.push({name:'/login'})
      }
  }
  next()
})
  • beforeResolve
  • afterEach 路由独享守卫
  • beforeEnter 组件内守卫
  • beforeRouteEnter
  • beforeRouteUpdate
  • beforeRouteLeave

懒加载

当路由被访问的时候再加在对应组件。vueRouter只会在第一次进入页面的时候获取函数,然后使用缓存数据。

// 将
// import UserDetails from './views/UserDetails'
// 替换成
const UserDetails = () => import('./views/UserDetails')