一文彻底学会Vue路由

vue路由

1.vue-router简单使用

vue-router官网

1.1vue-router的下载
npm i vue-router@3
1.2在main.js
// 改文件是项目的入口文件


// 映入vue
import Vue from 'vue'

// 映入app组件
import App from './App.vue'

//映入vue-rputer
import VueRouter from 'vue-router'

//映入路由器
import router from './router'
 
// 关闭vue生产提示
Vue.config.productionTip = false

//应用vuerouter
Vue.use(VueRouter)

// 创建vue实例
new Vue({
  el:"#app",
  render: h => h(App),
  router:router
}) 

1.3router的配置
//改文件用于专门创建路由

import VueRouter from "vue-router";
// 映入组件
import Home from '../components/Home'
import About from '../components/About'

//创建并暴露一个路由
export default new VueRouter({
     routes:[
        {
            path:'/home',
            component:Home
        },
        {
            path:'/about',
           component:About
        }
     ]
})
1.4 路由的切换
<router-link to="/about">About</router-link>
<router-link to="/home">Home</router-link>
1.5路由指定位置的显示
   <!-- 指定组件展示的位置 -->
        <router-view></router-view>

在这里插入图片描述

注意:
1.路由组件一般存放在pages组件中,普通组件存放在commopnts组件中。
2.每个zujain都有一个$router属性,存放自己的路由信息。
3.切换的路由组件一般是被销毁了

2.嵌套路由
2.1 多级路由的配置
export default new VueRouter({
     routes:[
        {
            path:'/home',
            component:Home,
            children:[
                {
                    path:'message',
                    component:Message
                },
                {
                    path:'news',
                    component:News
                }
            ]
        },
        {
            path:'/about',
           component:About
        }
     ]
})

在这里插入图片描述

<template>
  <div>
    <router-link to="/home/message">Message</router-link>
    <router-link to="/home/news">News</router-link>
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: "Home",
};
</script>

<style></style>

注意在home页面中需要在跳转的页面上加上/home的路径

2.2 多级路由的query传参

1.query传参

 <router-link
          :to="{
            path: '/home/message/detail',
            query: {
              id: item.id,
              title: item.title,
            },
          }"
        >
          {{ item.title }}
        </router-link>

2.接受参数

在vm的route中接受父路由传递的参数

在这里插入图片描述

  <ul>
      <li>消息id:{{ $route.query.id }}</li>
      <li>消息标题:{{ $route.query.title }}</li>
    </ul>
2.3 多级路由的params传参

1.params传参

<router-link :to="`/home/message/detail/${item.id}/${item.title}`">{{
          item.title
        }}</router-link>

在这里插入图片描述

2.接受参数

 <ul>
      <li>消息id:{{ $route.params.id }}</li>
      <li>消息标题:{{ $route.params.title }}</li>
    </ul>
2.4 接受路由的props参数

在路由中配置全新的配置项props

 props($route){
                          return {
                                    id:$route.query.id,
                                    title:$route.query.title
                                }
                            }

在这里插入图片描述
2.接受参数

  props: ["id", "title"],
2.编程试路由
2.1 按钮的跳转
  this.$router.push({
        name: "detail",
        query: {
          id: item.id,
          title: item.title,
        },
      });
      
  this.$router.replace({
        name: "detail",
        query: {
          id: item.id,
          title: item.title,
        },
      });

在这里插入图片描述

2.2页面的前进与后退
this.$router.back();
this.$router.forward();
this.$router.go(2) //2表示前进2步,-1表示后退一步

在这里插入图片描述

2.3路由缓存

在路由内容展示的页面的router-view加上keep-live

 <keep-alive include="news">  
      <!-- news为组件名 -->
      <router-view></router-view>
    </keep-alive>
3.路由守卫
3.1 配置前置路由守卫

1.在全局前置路由守卫中,to是即将要跳转的路由,from是来自那个路由,next是是否放行。

在这里插入图片描述

routes.beforeEach((to,from,next)=>{
  console.log(to,from)
  if(to.path==='/home/news'||to.path==='/home/message'){
    if(localStorage.getItem('school')==='小明'){
        next()
    }else{
        alert('不是小明')
    }
  }else{
    next()
  }
})

2.在route的mate中添加是否需要鉴权的条件。
在全局前置中通过判断是否需要鉴权来判断是否需要跳转。

在这里插入图片描述

在这里插入图片描述

3.2 独享路由守卫
 beforeEnter:(to,from,next)=>{
                        console.log(to,from)
                          if(to.path==='/home/news'||to.path==='/home/message'){
                            if(localStorage.getItem('school')==='小明'){
                                next()
                            }else{
                                alert('不是小明')
                            }
                          }else{
                            next()
                          }
                    }

在这里插入图片描述

3.3 组件内的路由守卫
beforeRouteEnter(to, from, next) {
    console.log(to, from);
    if (to.meta.isAuth) {
      if (localStorage.getItem("school") === "小明") {
        next();
      } else {
        alert("不是小明");
      }
    } else {
      next();
    }
  },
4.路由的两种请求模式
4.1hash

http://localhost:8080/#/home/news
其中#后的值不会发送网络请求。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code袁

你的支持是我莫大的幸运

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值