• Vue路由笔记


    1.基本使用

    1. 安装vue-router,命令:npm i vue-router

    注意:新的vue-router 4只能在vue3中使用,vue-router3能在vue2中使用

    用vue2可运行: npm i vue-router@3

    1. main.js文件应用插件:Vue.use(VueRouter) (并引入路由文件)
    2. 编写router配置项:
    1. //引入VueRouter
    2. import VueRouter from 'vue-router'
    3. //引入Luyou 组件
    4. import About from '../components/About'
    5. import Home from '../components/Home'
    6. //创建router实例对象,去管理一组一组的路由规则
    7. const router = new VueRouter({
    8. routes:[
    9. {
    10. path:'/about',
    11. component:About
    12. },
    13. {
    14. path:'/home',
    15. component:Home,
    16. meta:{isAuth:true,title:'详情'},//传递数据
    17. }
    18. ]
    19. })
    20. //暴露router
    21. export default router
    • 实现切换(active-class可配置高亮样式) 点击,实现光亮效果,点击添加“”里的类

    router-link会别vue解析成a,可以当做a标签使用

    About

    • 指定展示位置 (类似于:slot插槽,将指定的路由放到模板里)

     

    2.多级路由(多级路由) 

    1. 配置路由规则,使用children配置项:

    1. routes:[
    2. {
    3. path:'/about',
    4. component:About,
    5. },
    6. {
    7. path:'/home',
    8. component:Home,
    9. children:[ //通过children配置子级路由
    10. {
    11. path:'news', //此处一定不要写:/news
    12. component:News
    13. },
    14. {
    15. path:'message',//此处一定不要写:/message
    16. component:Message
    17. }
    18. ]
    19. }

     2. 跳转(要写完整路径):

    News

     3.路由接收query参数

    父级路由传递:

    1. <router-link :to="`/home/message/detail?id=${m.id}&title=${m.title}`">跳转router-link>
    2. <router-link
    3. :to="{
    4. path:'/home/message/detail',
    5. query:{
    6. id:666,
    7. title:'你好'
    8. }
    9. }"
    10. >跳转router-link>

     子级路由接收数据:

    $route可获取到当前路由的信息

    $route.query.id
    $route.query.title

    4.路由的params参数

    1. 配置路由,声明接收params参数

    1. {
    2. path:'/home',
    3. component:Home,
    4. children:[
    5. {
    6. path:'news',
    7. component:News
    8. },
    9. {
    10. component:Message,
    11. children:[
    12. {
    13. name:'xiangqing',
    14. path:'detail/:id/:title', //使用占位符声明接收params参数
    15. component:Detail,
    16. meta:{
    17. isshow:false,//可通过false配置路由信息
    18. }
    19. }
    20. ]
    21. }
    22. ]
    23. }

    2. 传递参数

    1. <router-link :to="/home/message/detail/666/你好">跳转router-link>
    2. <router-link
    3. :to="{
    4. name:'xiangqing',
    5. params:{
    6. id:666,
    7. title:'你好'
    8. }
    9. }"
    10. >跳转router-link>

    3. 接收参数:

    $route.params.id
    $route.params.title

     5.编程式路由导航

    (1)replace属性

    1. 作用:控制路由跳转时操作浏览器历史记录的模式
    2. 浏览器的历史记录有两种写入方式:分别为pushreplacepush是追加历史记录,replace是替换当前记录。路由跳转时候默认为push
    3. 如何开启replace模式:News

     (2)路由导航api

    • 作用:不借助实现路由跳转,让路由跳转更加灵活

    具体编码:

    1. //$router的两个API
    2. this.$router.push({
    3. name:'xiangqing',
    4. params:{
    5. id:xxx,
    6. title:xxx
    7. }
    8. })
    9. this.$router.replace({
    10. name:'xiangqing',
    11. params:{
    12. id:xxx,
    13. title:xxx
    14. }
    15. })
    16. this.$router.forward() //前进
    17. this.$router.back() //后退
    18. this.$router.go(1) //可前进也可后退 和window.href.go()用法类似

    6.缓存路由组件:

    • 作用:让不展示的路由组件保持挂载,不被销毁。
    • 具体编码:
    1. "News">
    2. <router-view>router-view>

    7.路由守卫

    index中路由的配置:

    通过配置存在meta对象中的isAuth,和title属性分别进行是否做权限判断,和路由标题显示

    next()方法决定是否向下执行路由

    1. //创建并暴露一个路由器
    2. const router = new VueRouter({
    3. routes:[
    4. {
    5. name:'guanyu',
    6. path:'/about',
    7. component:About,
    8. meta:{isAuth:true,title:'关于'}
    9. },
    10. {
    11. name:'zhuye',
    12. path:'/home',
    13. component:Home,
    14. meta:{title:'主页'},
    15. children:[
    16. {
    17. name:'xinwen',
    18. path:'news',
    19. component:News,
    20. meta:{isAuth:true,title:'新闻'},
    21. /* beforeEnter: (to, from, next) => {
    22. console.log('前置路由守卫',to,from)
    23. if(to.meta.isAuth){ //判断是否需要鉴权
    24. if(localStorage.getItem('school')==='atguigu'){
    25. next()
    26. }else{
    27. alert('学校名不对,无权限查看!')
    28. }
    29. }else{
    30. next()
    31. }
    32. } */
    33. },
    34. {
    35. name:'xiaoxi',
    36. path:'message',
    37. component:Message,
    38. meta:{isAuth:true,title:'消息'},
    39. children:[
    40. {
    41. name:'xiangqing',
    42. path:'detail',
    43. component:Detail,
    44. meta:{isAuth:true,title:'详情'},
    45. }
    46. ]
    47. }
    48. ]
    49. }
    50. ]
    51. })
    1. 作用:对路由进行权限控制
    2. 分类:全局守卫、独享守卫、组件内守卫
    3. 全局守卫:

     

    1. //全局前置守卫:初始化时执行、每次路由切换前执行
    2. router.beforeEach((to,from,next)=>{
    3. console.log('beforeEach',to,from)
    4. if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制
    5. if(localStorage.getItem('school') === 'atguigu'){ //权限控制的具体规则
    6. next() //放行
    7. }else{
    8. alert('暂无权限查看')
    9. // next({name:'guanyu'})
    10. }
    11. }else{
    12. next() //放行
    13. }
    14. })
    15. //全局后置守卫:初始化时执行、每次路由切换后执行
    16. router.afterEach((to,from)=>{
    17. console.log('afterEach',to,from)
    18. if(to.meta.title){
    19. document.title = to.meta.title //修改网页的title
    20. }else{
    21. document.title = 'vue_test'
    22. }
    23. })//全局配置标题

    独享守卫:

    在routes:配置中单独的配置路由守卫

    1. beforeEnter(to,from,next){
    2. console.log('beforeEnter',to,from)
    3. if(to.meta.isAuth){ //判断当前路由是否需要进行权限控制
    4. if(localStorage.getItem('school') === 'atguigu'){
    5. next()
    6. }else{
    7. alert('暂无权限查看')
    8. // next({name:'guanyu'})
    9. }
    10. }else{
    11. next()
    12. }
    13. }

    组件内守卫:

    通过路由规则,进,出入该组件时被调用

    1. //进入守卫:通过路由规则,进入该组件时被调用
    2. beforeRouteEnter (to, from, next) {
    3. },
    4. //离开守卫:通过路由规则,离开该组件时被调用
    5. beforeRouteLeave (to, from, next) {
    6. }

    8.路由器的两种工作模式

    在index配置文件里:

    暴露的router路由,有两种工作模式:

    1. const router = new VueRouter({
    2. mode:'history',//或者mode:'hash'
    3. routes:[]//配置路径
    4. })
    1. 对于一个url来说,什么是hash值?—— #及其后面的内容就是hash值。
    2. hash值不会包含在 HTTP 请求中,即:hash值不会带给服务器。
    3. hash模式:
    4. 地址中永远带着#号,不美观 。
    5. 若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法。
    6. 兼容性较好。
    7. history模式:
    8. 地址干净,美观 。
    9. 兼容性和hash模式相比略差。
    10. 应用部署上线时需要后端人员支持,解决刷新页面服务端404的问题。
  • 相关阅读:
    Java开发一些偏冷门的面试题
    初见物理引擎库Cannon.js:CannonDebugRenderer的基本使用
    软件测试进阶篇----自动化测试概述
    es实操笔记
    Lumiprobe染料 NHS 酯丨BDP FL NHS 酯研究
    Set集合
    jsp就业管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
    【Hack The Box】linux练习-- Shocker
    DTDX991A 61430001-UW 自由IOT引入人工智能功能
    【OpenCV DNN】Flask 视频监控目标检测教程 07
  • 原文地址:https://blog.csdn.net/Azbtt/article/details/127820798