目录
1.理解:一个路由(route)就是一组映射关系(key - value),多个路由需要路由器(router)进行
2.前端路由: key是路径,value是组件。
1.安装vue-router,命令:npm i vue-router
2.应用插件:Vue.use(VueRouter)
3.编写router配置项:
- //引入VueRouter
- import VueRouter from 'vue-router'
- //引入Luyou组件
- import About from '../ components/About'
- import Home from '../components/Home '
- //创建router实例对象并暴露,去管理一组一组的路由规则
- export default new VueRouter({
- routes: [
- {
- path: ' /about ' ,
- component: About
- },
- {
- path: ' /home ' ,
- component: Home
- }
- ]
- })
4.实现切换(active-class可配置高亮样式)
class="active" to="/about" >About
5.指定展示位置
1.配置路由规则,使用children配置项:
- routes: [
- {
- path : '/about' ,
- component: About,
- },
- {
- path : '/home',
- component : Home,
- children:[ //通过children配置子级路由
- {
- path : 'news ',//此处一定不要写:/news
- component:News
- },
- {
- path: ' message' ,//此处一定不要写:/ message
- component : Message
- }
- ]
- }
2.跳转(要写完整路径):
1.传递参数
- <router-link :to="/home/message/detail?id=666&title=你好">跳转router-link>
- <router-link
- :to="{
- path : ' /home/message/detail',query:{
- id:666,title: "你好'}
- >跳转router-link>
2.接收参数:
1.作用:可以简化路由的跳转。
2.如何使用
- 1.给路由命名:
- path: ' (demo' ,component : Demo,children: [
- {
- pathE 'test ',component: Test,children: [
- {
- name: ' hello’//给路由命名path: jwelcome'
- component :fieiio,
- }
- ]
- }
- ]
- }
2.简化跳转:
- <router-link to="/demo/test/welcome">跳转router-link>
- <router-link :to="iname : ' hello'}">跳转router-link>
- <router-link
- :to="{
- name : " hello',query:{
- id:666,
- title : '你好·
- >跳转router-link>
1.配置路由,声明接收params参数
- {
- path : 'home ' ,
- component:Home,
- children: [
- {
- path : 'news',
- component:News
- },
- {
- component:Message,
- children:[
- {
- name : ' xiangqing ' ,
- path: 'detail/:id/:title',//使用占位符声明接收params参数
- component:Detail
- }
- ]
- }
- ]
- }
2.传递参数
- <router-link :to="/home/message/detail/666/你好">跳转router-link>
- <router-link
- :to="{
- name : "xiangqing ',params:{
- id:666,
- title: '你好·
- }"
- >跳转router-link>
特别注意:路由携带params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!
3.接收参数:
$route.params.F$route.params.title
作用:让路由组件更方便的收到参数
- 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.作用:控制路由跳转时操作浏览器历史记录的模式
2.浏览器的历史记录有两种写入方式:分别为push和replace,push是追加历史记录,replace是替换当前记录。路由跳转时候默认为push
3.如何开启replace模式:
1.作用:不借助
2.具体编码:
- //$router的两个API
- this.$router.push({
- name: " xiangqing',
- params :{
- id :xxx,title:xxX
- }
- })
- this.$router.replace({
- name: " xiangqing' ,
- params :{
- id :xxx,title:xXX
- }
- })
- this.$router.forward()//前进
- this.$router.back()//后退
- this.$router.go()//可前进也可后退
1.作用:让不展示的路由组件保持排载,不被销毁。
⒉.具体编码:
1.作用:路由组件所独有的两个钩子,用于捕获路由组件的激活状态。
2.具体名字:
1. activated路由组件被激活时触发。2. deactivated路由组件失活时触发。
1.作用:对路由进行权限控制
2.分类:全局守卫、独享守卫、组件内守卫
3.全局守卫:
- //全局前置守卫:初始化时执行、每次路由切换前执行
- router.beforeEach((to,from, next)=>{
- console.log( ' beforeEach' ,to,from)
- if(to.meta.isAuth){//判断当前路由是否需要进行权限控制
- if(localstorage.getItem( ' school ') === 'atguigu '){ //权限控制的具体规则
- next()//放行
- }else{
- alert( '暂无权限查看')// next({name : ' guanyu'})
- }
- }else{
- next()//放行
- }
- })
- //全局后置守卫:初始化时执行、每次路由切换后执行
- router.afterEach((to,from)=>{
- console.log( ' afterEach " ,to,from)if(to.meta.title){
- document.title = to.meta.title //修改网页的title}else{
- document.title = 'vue_test'
- }
- }
4.独享守卫:
- beforeEnter(to,from,next){
- console.log( ' beforeEnter ' ,to,from)
- if(to.meta.isAuth){//[判断当前路由是否需要进行权限控制
- if(localStorage.getItem( 'school ' ) === 'atguigu '){
- next()
- }else{
- alert( '暂无权限查看')l l next({name : ' guanyu ' })
- }
- }else{
- next()
- }
- }
5.组件内守卫:
//进入守卫:通过路由规则,进入该组件时被调用beforeRouteEnter (to,from,next) {},
//离开守卫:通过路由规则,离开该组件时被调用beforeRouteLeave (to,from,next) {}
1.对于一个url来说,什么是hash值?——#及其后面的内容就是hash值。2.hash值不会包含在HTTP请求中,即: hash值不会带给服务器。
3. hash模式:
1.地址中永远带着#号,不美观。
⒉.若以后将地址通过第三方手机app分享,若app校验严格,则地址会被标记为不合法。3.兼容性较好。
4.history模式:
1.地址干净,美观。
2.兼容性和hash模式相比略郄
3.应用部署上线时需要后端人员支持,解决刷新页面服务端404的问题。