一文彻底学会Vue路由

简介: Vue Router简介,包括基本使用、嵌套路由、参数传递和路由守卫。首先,通过`npm i vue-router@3`安装,然后在`main.js`引入并应用。配置路由时,创建VueRouter实例,定义如`/home`、`/about`等路径及其对应组件。使用`<router-link>`进行切换,`<router-view>`展示组件。嵌套路由通过`children`配置多级路径,参数传递可使用`query`或`params`。路由守卫分为全局、独享和组件内三种,用于控制访问权限。

vue路由

@[toc]

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>

image.png

注意:
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
        }
     ]
})

image.png

<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>

image.png

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,
        },
      });

image.png

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

image.png

2.3路由缓存

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

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

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

image.png

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中添加是否需要鉴权的条件。
在全局前置中通过判断是否需要鉴权来判断是否需要跳转。

image.png

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()
                          }
                    }

image.png

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月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
129 4
|
13天前
|
人工智能 自然语言处理 JavaScript
用 CodeBuddy 搭建Vue框架 像呼吸一样简单
本文介绍如何借助 CodeBuddy 快速创建 Vue 项目。CodeBuddy 是一款支持自然语言编程的工具,能根据用户需求自动生成代码,降低开发门槛。文章详细说明了通过 CodeBuddy 创建 Vue 项目的步骤,包括解决项目创建失败的问题、自动补全代码功能以及启动开发服务器的方法。无论开发者经验如何,CodeBuddy 都能显著提升效率,让开发更专注创意实现。
|
24天前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
2月前
|
JavaScript 前端开发 算法
vue渲染页面的原理
vue渲染页面的原理
145 56
|
2月前
|
SQL JavaScript 前端开发
Vue实现动态数据透视表(交叉表)
Vue实现动态数据透视表(交叉表)
192 13
|
2月前
|
数据采集 资源调度 JavaScript
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
本文介绍了使用 Vue Flow 绘制流程图的方法与技巧。Vue Flow 是一个灵活强大的工具,适合自定义复杂的流程图。文章从环境要求(Node.js v20+ 和 Vue 3.3+)、基础入门案例、自定义功能(节点与连线的定制、事件处理)到实际案例全面解析其用法。重点强调了 Vue Flow 的高度灵活性,虽然预定义内容较少,但提供了丰富的 API 支持深度定制。同时,文中还分享了关于句柄(handles)的使用方法,以及如何解决官网复杂案例无法运行的问题。最后通过对比 mermaid,总结 Vue Flow 更适合需要高度自定义和复杂需求的场景,并附带多个相关技术博客链接供进一步学习。
|
3月前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
2月前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
3月前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。