1.1 相关理解1.1.1 vue-router
的理解
Vue
的一个插件库,专门用来实现 SPA
应用
1.1.2 对 SPA
应用的理解
- 单页
Web
应用(single page web application,SPA) - 整个应用只有一个完整的页面
- 点击页面中的导航链接不会刷新页面,只会做页面的局部更新
- 数据需要通过
Ajax
请求获取
1.1.3 路由的理解
什么是路由
- 一个路由就是一组映射关系(
key-value
)key
为路径,value
可能是function
或component
- 一个路由就是一组映射关系(
路由分类
- 后端路由:
- 理解:
value
是function
, 用于处理客户端提交的请求 - 工作过程:服务器接收到一个请求时,根据请求路径找到匹配的函数来处理请求,返回响应数据
- 理解:
2.前端路由:
- 理解:
value
是component
,用于展示页面内容 - 工作过程:当浏览器的路径改变时,对应的组件就会显示。
- 后端路由:
1.2 基本路由1.2.1 安装与使用
安装
vue-router
,命令:npm install vue-router
应用插件:
Vue.use(VueRouter)
编写
router
配置项://引入VueRouterimport VueRouter from 'vue-router'//引入Luyou 组件import About from '../components/About'import Home from '../components/Home'//创建router实例对象,去管理一组一组的路由规则const router = new VueRouter({ routes:[ { path:'/about', component:About }, { path:'/home', component:Home } ]})//暴露routerexport default router
实现切换(
active-class
可配置高亮样式)About
指定展示位置
几个注意点:
- 路由组件通常存放在
pages
文件夹,一般组件通常存放在components
文件夹 - 通过切换,“隐藏”了的路由组件,默认是被销毁掉的,需要的时候再去挂载
- 每个组件都有自己的
$route
属性,里面存储着自己的路由信息 - 整个应用只有一个
router
,可以通过组件的$router
属性获取到
- 路由组件通常存放在
1.2.2 总结
编写使用路由的 3 步
- 定义路由组件
- 注册路由
- 使用路由
1.3 嵌套(多级)路由
配置路由规则,使用
children
配置项:routes:[ { path:'/about', component:About, }, { path:'/home', component:Home, children:[ //通过children配置子级路由 { path:'news', //此处一定不要写:/news component:News }, { path:'message',//此处一定不要写:/message component:Message } ] } ]
跳转(要写完整路径):
News
1.4 路由传参1.4.1 路由的 query
参数
传递参数
跳转跳转
接收参数:
$route.query.id$route.query.title
1.4.2 命名路由
作用:可以简化路由的跳转。
如何使用
给路由命名:
{path:'/demo',component:Demo,children:[{path:'test',component:Test,children:[{ name:'hello' //给路由命名path:'welcome',component:Hello,}]}]}
简化跳转:
跳转跳转跳转
1.4.3 路由的 params
参数
配置路由,声明接收
params
参数{path:'/home',component:Home,children:[{path:'news',component:News},{component:Message,children:[{name:'xiangqing',path:'detail/:id/:title', //使用占位符声明接收params参数component:Detail}]}]}
传递参数
跳转跳转
特别注意:路由携带
params
参数时,若使用to
的对象写法,则不能使用path
配置项,必须使用name
配置!接收参数:
$route.params.id$route.params.title
1.4.4 路由的 props
配置
作用:让路由组件更方便的收到参数
{name:'xiangqing',path:'detail/:id',component:Detail,//第一种写法:props值为对象,该对象中所有的key-value的组合最终都会通过props传给Detail组件// props:{a:900}//第二种写法:props值为布尔值,布尔值为true,则把路由收到的所有params参数通过props传给Detail组件// props:true//第三种写法:props值为函数,该函数返回的对象中每一组key-value都会通过props传给Detail组件props(route){return {id:route.query.id,title:route.query.title}}}
1.4.5 的
replace
属性
- 作用:控制路由跳转时操作浏览器历史记录的模式
- 浏览器的历史记录有两种写入方式:分别为
push
和replace
,push
是追加历史记录,replace
是替换当前记录。路由跳转时候默认为push
- 如何开启
replace
模式:News
1.5 编程式路由导航
this.$router.push(path)
: 相当于点击路由链接(可以返回到当前路由界面)this.$router.replace(path)
: 用新路由替换当前路由(不可以返回到当前路由界面)this.$router.back()
: 请求(返回)上一个记录路由this.$router.go(-1)
: 请求(返回)上一个记录路由this.$router.go( 1 )
: 请求下一个记录路由