Vue Router学习(一)—— 初识路由

前言

vue是单页面应用,在一个单页面中进入子页面或者跳转到其他页面离不开路由的帮助,与vue相辅的路由插件是vue-router,如果让你手写vue-router配置项或者排查问题,这时候就需要扎实的基础,并且vue-router4.x都有了ts类型定义,学习vue-router肯定会有所收获。

路由

当我们接触开源项目时,vue-router已经与vue绑定了,基础路由也已经写好,看起来vue-router可有可无,但是如果我们把路由去掉,想要进入子页面就会变得很麻烦,比如我们有一个主页面跟一个子页面,没有路由该如何实现两个页面之间的跳转呢?一种简单的方式的是通过v-show或v-if根据变量去判断:

js 复制代码
   <div>
    <A v-show="pageNo === 1"></A>
    <B v-show="pageNo === 2"></B>
  </div>

假设A是父页面,B是子页面通过修改pageNo的值去显示不同的组件,这种方法很受限制,父子页面之间的传参也麻烦,特别是子页面一多,各种交互就会很麻烦,后续维护起来也很难受(我就做过类似的项目,刚接手的时候想'死'的心都有了)。而路由就让这个过程变得很简单,直接用this.$router.push想跳到哪个页面都行。除此之外还可以使用a标签,路由在页面也是显示为a标签,但是路由不会重新加载页面,就能直接更改url。有了对比才更加明显,路由方便了许多。

router-link

router-link是可以包裹链接的组件,跟a标签基本一样,并且它会在页面上渲染a标签。相比于a标签,router-link不会在路由修改时重新加载页面,因为它会守卫点击事件,而且跳转链接只需要写相对路径就行。我们翻下源码,可以找到router-link会render成a标签。

router-link的ts接口定义为RouterLinkProps,也就是router-link的接收参数:

  • to:跳转的路由链接,接收字符串或者路由对象,使用对象时候我们可以传参。
js 复制代码
    <router-link to="my-page"></router-link>
    <router-link to="{name:'my-page',params:{a:'1'}}"></router-link>

具体的ts类型为RouteLocationRaw

  • replace:是否替换路由,接收布尔值,如果为false,那么点击跳转就会是router.replace。
  • activeClass:点击后的样式,类似于a标签点击后的伪类选择器。
  • exactActiveClass:点击后的样式,跟acitveClass不同,它是需要严格匹配路由才会触发。 针对以上两个参数,我们可以简单写个demo,我们在/table页面中用router-link写下跳转路由。
js 复制代码
  <router-link to="/">first</router-link>
  <router-link to="/table">second</router-link>

此时页面两个路由就是初始样式,当我们设置activeClass时,会发现两个路由都受影响了。

js 复制代码
.router-link-active {
  border: 1px solid red;
}

当我们换成严格匹配时,链接到/table的才会受影响,我们此时在/table页面中。

js 复制代码
   .router-link-exact-active {
  border: 1px solid red;
}
  • ariaCurrentValue:aria-current的值,了解即可。
  • custom:是否使用自定义链接,设置为true时,配合着v-slot使用,通过v-slot获取参数,在自定义的链接中使用。

router-view

router-view:用来显示组件,在vue中一个路由会有着对应的vue文件,如果只使用router-link跳转路由,而没有使用router-view那么页面就会是空白的,router-view就像窗口将路由对应的组件展示出来啦。 router-view的参数很简单:

  • name:组件名称,渲染出名称对应的页面。
  • route:路由对象。
    router-view是用来渲染视图的组件,外面可以包裹transition做动画过渡效果,也可以用keep-alive缓存组件。

总结

Vue Router极大地方便我们进行页面之间的跳转,让vue单页面应用使用起来更加方便,而router-link与router-veiw是跳转路由与展示页面的组件,这两个组件的含义是要牢记于心的。

相关推荐
longlongago~~3 分钟前
DRM(数字权限管理技术)防截屏录屏----视频转hls流加密、web解密播放
前端·windows·node.js·音视频
爱上语文8 分钟前
Ajax入门程序
前端·javascript·css·ajax·html
北国13712 分钟前
python端拉流检测后再推流到流媒体服务器实现前端拉流查看(多摄像头切换)
服务器·前端·python·opencv·流媒体服务器
木子七15 分钟前
vue3-组件通信
前端·vue
乐闻x17 分钟前
Vue 是如何实现数据双向绑定的?
前端·vue.js
乐闻x19 分钟前
Vue 3 实现高性能拖拽指令的最佳实践
前端·javascript·vue.js
陈逸轩*^_^*30 分钟前
硅谷甄选前端项目环境配置笔记
前端·笔记
橙子家31 分钟前
Element-UI 中关于 Table 的几个功能点简介(行列的合并和样式、合计行配置等)
前端
骑单车的小恐龙_flush32 分钟前
初次认识IntersectionObserver
vue.js
瓶子丶35 分钟前
Vue实现一个“蛇形”步骤条
前端