关于前端路由
VueRouter
组件
- router-view
- router-link
- 用来实现让用户点击跳转路由地址的功能,需要传入to属性,告知点击之后跳转的路由地址
对象
- $router
- $route
- 当前路由对象,包含具体的路由名称,路由路径,query,params等属性
配置对象
- mode:用于指定当前路由模式
- hash
- 优点:兼容性好,后端不需要做任何的配置
- 缺点:路径中带#,会导致锚点功能无法使用
- 原理:
- 控制地址栏变化:通过
window.location.hash="/xxx"操作浏览器的地址栏,并且页面不会重新请求
- 监听地址栏变化:通过window身上的hashchange事件监听变化
- history
- 优点:不会影响锚点功能
- 缺点:兼容性较差,项目上线时,后端需要进行专门的配置
- 原理:
- 通过
window.history.pushState(data,title,url)可以操作浏览器的地址栏,并且保证页面不会重新请求
- 通过window身上的popState事件,可以监视地址栏变化,但只能监视浏览器的前进和后退
- routes:包含所有路由对象的数组
- 对象属性
- path:路由地址
- name:路由名称
- component:路由地址匹配时的组件
应用
- 安装:vue-cli下用
vue add router添加依赖
- 创建router文件夹,创建index.js
- 引入vue,引入VueRouter,引入要使用的路由组件
Vue.use(VueRouter)
- 定义一个routes数组,内包含所有的路由对象
- 构造调用VueRouter,获取路由实例对象,传入一个对象,包括mode路由模式和routes数组
- 暴露该路由实例对象
- main.js中引入router路由实例对象,记得添加到new Vue里面
嵌套路由(一个路由组件也可以包含子路由)
- 在routes路由数组中,某个需要的路由对象里面定义children子路由数组,格式同routes
导航方式
- 声明式导航
- 编程式导航
router.push(...):导航到别的url,这个方法会向history栈添加一个新的记录,所以用户点击浏览器后退按钮时,会回到之前的url
- tips:
- 替换当前位置
- 声明式
<router-link to="/xxx" replace>
- 编程式
router.replace(...)
- 也可以在
router.push({path:"".replace:true})
- 横跨历史
- router.go(1):向前移动一条记录
- router.go(-1):返回一条记录
传参方式
- query
- params
路由懒加载
- VueRouter支持动态引入,当路由被访问时才加载对应组件
- 静态导入
import xxx from './pages/xxx'
- 动态导入
const xxx=()=> import('./pages/xxx')
- 把组件按组分块打包
- 如果我们想把某个路由下的所有组件都打包在同一个异步块(chunk)中,只需命名chunk,用一个特殊的注释语法
const xxx=()=> import(/* webpackChunkName:"xxx" */ './pages/xxx')