一、前端路由规则
1.1、URL的hash
URL的hash也就是锚点(#), 本质上是改变window.location的href属性.我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新
1.2、HTML5的history模式
history接口是HTML5新增的, 它有五种模式改变URL而不刷新页面.
1)history.pushState()
2)history.replaceState()
3)history.go()
4)history.back()
history.back() 等价于 history.go(-1)
5)history.forward()
history.forward() 则等价于 history.go(1)
二、Vue-router
2.1、初识vue-router
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用
官网:https://router.vuejs.org/zh/
vue-router是基于路由和组件的:
- 路由用于设定访问路径, 将路径和组件映射起来.
- 在vue-router的单页面应用中, 页面的路径的改变就是组件的切换.
2.2、安装使用vue-router
1)创建router实例
2)挂载到Vue实例中
3)创建路由组件
4)配置组件和路径的映射关系
5)使用路由
注意:
<router-link>: 该标签是一个vue-router中已经内置的组件, 它会被渲染成一个<a>标签.
<router-view>: 该标签会根据当前的路径, 动态渲染出不同的组件.
网页的其他内容, 比如顶部的标题/导航, 或者底部的一些版权信息等会和<router-view>处于同一个等级.在路由切换时, 切换的是<router-view>挂载的组件, 其他内容不会发生改变.
6)效果
2.3、路由的默认路径
默认情况下, 进入网站的首页, 我们希望<router-view>渲染首页的内容.但是我们的实现中, 默认没有显示首页组件, 必须让用户点击才可以.
2.4、HTML5的History模式
默认情况下, 路径的改变使用的URL的hash,希望使用HTML5的history模式, 进行如下配置即可
2.5、router-link补充
router-link可以有如下属性:
1)to, 用于指定跳转的路径
<router-link to="/home">首页</router-link> <router-link to="/about">关于</router-link>
2)tag: tag可以指定<router-link>之后渲染成什么组件, 比如上面的代码会被渲染成一个<li>元素, 而不是<a>
<router-link to="/home" tag="button">首页</router-link> <router-link to="/about" tag="button">关于</router-link>
3)replace: replace不会留下history记录, 所以指定replace的情况下, 后退键返回不能返回到上一个页面中
<router-link to="/home" tag="button" replace>首页</router-link> <router-link to="/about" tag="button" replace>关于</router-link>
4)active-class: 当<router-link>对应的路由匹配成功时, 会自动给当前元素设置一个router-link-active的class, 设置active-class可以修改默认的名称.
在进行高亮显示的导航菜单或者底部tabbar时, 会使用到该类.
但是通常不会修改类的属性, 会直接使用默认的router-link-active即可.
当设置active-class后:
需求:当选中按钮时,显示红色
2.6、修改linkActiveClass
router-link-active具体的名称也可以通过router实例的属性进行修改
2.7、路由代码跳转
有时候, 页面的跳转可能需要执行对应的JavaScript代码
2.8、动态路由
在某些情况下,一个页面的path路径可能是不确定的,比如我们进入用户界面时,希望是如下的路径:/user/aaaa或/user/bbbb,除了有前面的/user之外,后面还跟上了用户的ID
1)创建组件
2)定义路由跳转
3)组件中使用
4)效果
2.8、路由的懒加载
1)认识路由的懒加载
2)路由懒加载的效果
3)懒加载的方式
2.9、嵌套路由
1)认识嵌套路由
2)定义两个子组件
3)定义路由规则
4)父组件中使用子组件
5)效果
2.10、传递参数
1)准备工作
- 创建新的组件Profile.vue
- 配置路由映射
- 添加跳转的<router-link>
2)传递参数的方式
3)传递参数方式一: <router-link>
4)传递参数方式二: JavaScript代码
2.11、$route和$router区别
$router为VueRouter实例,想要导航到不同URL,则使用$router.push方法
$route为当前router跳转对象里面可以获取name、path、query、params等
2.12、导航守卫
1)为什么使用导航守卫?
2)导航守卫使用
首先, 我们可以在钩子当中定义一些标题, 可以利用meta来定义,其次, 利用导航守卫,修改我们的标题.
导航钩子的三个参数解析:
- to: 即将要进入的目标的路由对象.
- from: 当前导航即将要离开的路由对象.
- next: 调用该方法后, 才能进入下一个钩子
3)测试效果
4)补充
补充一:如果是后置钩子, 也就是afterEach, 不需要主动调用next()函数.
补充二: 上面我们使用的导航守卫, 被称之为全局守卫.
- 路由独享的守卫.
- 组件内的守卫.
官网:
https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E8%B7%AF%E7%94%B1%E7%8B%AC%E4%BA%AB%E7%9A%84%E5%AE%88%E5%8D%AB