Vue3 vue-router
            十二月 16, 2020
            
  
        
        vue-router
安装
| 1 | yarn add vue-router@4 | 
打造路由实例
- 在 src 目录下新建 router,再新建 index.ts
- router/index.ts (step 1)
| 1 | // index.ts | 
- 在 main.ts 中引入
| 1 | import router from "./router"; | 
- 在 src 目录下新建 pages 文件夹,再新建一些即将打造的路由(home,application,cate,about,list,not-found),里面写组件 
- createRouter() 中有两个参数 - history 用于选择路由模式
 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10- 路由模式 
 1. hash模式 比如: #/home
 - 兼容性强,ie/其他浏览器
 - 写法很别扭
 2. history模式 比如: /home
 - 新出的,基于html5做出来的,功能强大
 - 缺点
 - 看起来太像后端接口,所以一旦使用history模式就必须和后端配合使用
 - 这家伙看起来也像反向代理标识符,所以切记不能和反向代理标识符一致
 - 不兼容ie6-8- routes 路由表
 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16- 用于确定一个路由对应一个组件 
 {
 path: 路由路径 比如: /home
 component:路由渲染的组件
 meta 元数据 用于携带数据,比如做类似: 权限的功能
 redirect 重定向
 alias 别名【小名】
 children 子路由表 /home/hot
 beforeEnter 路由独享守卫,用于判断你是否有权限进入当前路由
 }
 component后面跟着的组件要使用路由懒加载
 1. 写法
 1. ()=> import() vue的异步组件
 2. /*webpackChunkName:'chunkName'*/ // webpack的代码分割功能
- router/index.ts (step 2) 
| 1 | // index.ts | 
错误路由书写
| 1 | { | 
一级路由和路由嵌套
一级路由
- 在 App.vue 中
- 使用 router-link(这是导航)
- to(声明式跳转链接)
- 使用 router-view(这是视图)
| 1 | <template> | 
路由嵌套
- 在 src/pages/home/index.vue 中
- 路由表即 router 文件夹 index.ts 中 路由要写 children 等数据
| 1 | <template> | 
路由监听
- 小案例 404 的时候上方导航不见
- 通过 navFlag 控制导航的销毁与创建
- 引入 useRoute 并实例化 const route = useRoute()
- watch(()=>route.path,()=>{对应的操作}) 来实现监听路由
| 1 | import { defineComponent, watch, reactive, toRefs } from "vue"; | 
激活路由
- 在 router-link 标签中加 active-class 属性
- 切换的时候动态切换类名实现效果
| 1 | <li> | 
动态路由
- 什么是动态路由?- url 是变化的,但是呢组件用的是同一个,这就是动态路由
 
- 动态传参- 我们从一个组件中将数据携带在 url 上传递到另一个组件中去
 
- 动态接参- 我们从 url 中获取参数,然后拿到参数之后进行使用【作为请求的参数】
 
- /about/index.vue 中 to 属性书写对象,name,params,query 属性
| 1 | <!-- /about/index.vue --> | 
- to 中加了 params 中的 id 属性,所以要在 router 文件夹的 index 中编辑
| 1 | { | 
- 在 pages/list/index.vue 接收传过来的参数
- 从 vue-router 中引入 useRouter 并在 setup 中实例化
- 创建一个 reactive 数据接收参数
- 在挂载阶段,从 route.params 或者 route.query 中拿取数据赋值给 reactive 数据
- return
- 在 template 中使用数据
| 1 | <template> | 
命令式跳转页面
- 从 vue-router 中引入 useRouter
- router 实例中有 push/replace 方法 里面写路径
| 1 | <template> | 
路由的追加、删除、路由是否存在的判断
路由追加
- 引入 useRouter
- 使用实例 router.addRoute() 里面接收对象,之前怎么写路由就怎么写
| 1 | <template> | 
路由删除,路由判断
- router.removeRoute(‘RouterName’)
| 1 | router.removeRoute("new"); | 
- router.hasRoute(‘RouterName’)
| 1 | router.hasRoute("new"); // 返回布尔值 | 
| 1 | <template> | 
过渡动效
- 安装
| 1 | $ yarn add animate.css | 
- 全局引入,在 main.ts 书写
| 1 | // main.ts | 
- 进入 App.vue
- 把之前的 router-view 组件用 transtion 组件包裹起来
- transtion 有三个属性
- mode
- enter-active-class
- leave-active-class
| 1 | <!-- App.vue --> | 
路由元数据
- 我们可以在 routes 中通过 meta 选项来携带一个数据,这个数据可以用来做很多事情,比如- 头部内容的变化
- 面包屑导航
 
- 在 router 文件夹中修改 about 路由添加 meta 属性
| 1 | { | 
- 进入 about 组件
- 引入 useroute
- route.meta.title 使用
| 1 | <template> | 
vue-router 中小 tips
- useRoute: 使用数据的时候用它
- useRouter: 使用方法的时候用它
- createRoute: 创建路由的时候用它
导航守卫
- 什么是导航守卫 - 导航守卫是 vue 提供的用于拦截路由的一种方式
- 类比: 停车场的那个起落杆/保安
 
- 导航守卫的类型 - 全局导航守卫【3】- 全局前置守卫 beforeEach
- 全局解析守卫【用法类似全局前置守卫】 beforeResolve
- 全局后置守卫 afterEach
 
- 路由独享守卫【1】 beforeEnter
- 组件级守卫【3】- 组件内前置守卫 beforeRouteEnter
- 组件内更新守卫 beforeRouteUpdate
- 组件内后置守卫 beforeRouteLeave
 
 
- 全局导航守卫【3】
- 令牌: token - token 的产生: 登录完成之后,后端会返回给我们
 
- 提供模拟数据的平台 
查看评论