概念
- 是什么 : 路径和组件的映射关系
- 为什么要使用路由 : 为了实现SPA
- Single Page Application
- 所有业务都在一个html页面中实现
- 优点:
- 页面不刷新,用户体验更好
- 数据传递比较方便
- 缺点:
- 首次刷新较慢
- 不利于SEO
使用
- 下包
- yarn add vue-router@版本号
- Vue2需要依赖低版本路由包
- 引入到main.js文件 import VueRouter from ‘vue-router’
- 安装路由插件
- Vue.use(VueRouter)
- 自动注册两个全局
标签
- router-view
- router-link
- 创建路由规则数组 const routes = [ {path : ‘路径’ , component:组件对象} ]
数组里面是对象,一个对象代表一条路由规则
- 组件对象需要提前导入
- 根据路由规则数组创建路由对象 const router = new VueRouter({routes})
- 将路由对象挂载到Vue实例上 new Vue({ router }).$mount(‘#app’)
- 使用router-view设置挂载点
声明是导航
- router-link
- 优点
- 自动判断是否要加#
- 自动添加类名,方便实现导航高亮
- 用法 <router-link to=“路径”></router-link>
- 传参
- query 查询字符串
- 传递 <router-link to=“路径?参数名=参数值&…”></router-link>
- 接收 $route.query.参数名
- params 动态路由传参
- 前提 : 在路由配置规则中,给path:‘/路径/:参数名’
- 传递 : <router-link to=“路径/参数值”></router-link>
- 接收 : $router.params.参数名
重定向
{
path:'/',
redirect:'指定要跳转的路径'
}
404页面
{
path:'*',
component:404组件对象
}
路由模式
new VueRouter({
mode:'history'
})
编程式导航
- 作用 :使用js代码进行页面切换
- 用法
- 如果使用name进行跳转,需要提前给路由规则配置name:‘路由名’
- this.$router.push({path:'路径’
或者
name:‘路由名’})
- 传参
this.$router.push({
path:'路径'
name:'路由名'
query:{}
params:{}
})
- 注意事项 : 如果使用puth跳转,会忽略params
- 所以推荐组合
path + query
,name + params
路由嵌套
- 创建子路由对应组件
- 配置路由规则
{
children:[
{}
]
}
- 注意事项 : path一般开头不加
/
- 在一级路由的组件中添加 router-view 占位
- router-link-active : 模糊匹配
- router-link-exact-active : 精准匹配
路由前置守卫
- 作用
- 权限控制,页面拦截
- 一般用于未登录状态拦截
- 用法
router.beforeEach((to,from,next)=>{
next()
})
- 必须要点用next(),否则路由系统会瘫痪
组件缓存
- 作用 : 减少频繁销毁创建组件导致的性能浪费
- 用法 : 在router-view外面包裹一层keep-alive
- 匹配缓存
- include=“组件的name值” 自包含
- exinclude=“组件的name值” 自排除