【Vue】vue-router路由使用

news2024/11/16 22:21:54

前言
Vue Router是Vue框架中非常重要的一个功能。
目标

1 单页面应用与多页面应用的区别;
2 vue-router的具体实现方法;
3 路由模式有哪几种,有什么区别;
4 如何进行路由守卫与路由缓存;


一 路由的概念

概念
Vue Router是Vue提供的路由管理器。将组件与路由一一对应起来,这种对应关系就路由。
Vue是一个典型的SPA单页面应用框架。SPA单页面是指网站只有一个html页面,所有的页面切换都只在这个一个页面中完成。不同组件的切换全部交由路由来完成.
单页面应用与多页面应用
在编程开发兴起时,多个html实现页面的切换,这就是早期的MPA多页面应用。随着技术的发展,这种页面切换方式的弊端也逐渐的显现出来,例如每次切换页面都需要加载资源用户体验极其不好,造成服务器压力也非常的大。为了解决多页面应用问题,SPA单页面应用应运而生。
SPA单页面应用是指只有一个html页面,不同组件切换通过路由来实现。页面在首次进入时加载相关的资源,内容功能都被封装到组件中,页面切换底层变成了组件切换,这样就解决了多页面应用的很多弊端。但是单页面应用也不是完美无瑕的,首次进入加载相关资源会导致SPA的首页加载慢

分类 实现方式 页面性能 开发效率 用户体验 首屏加载 其他页面加载 SEO
单页 一个html 按需更新性能高 非常好
多页 多个html 整页更新性能低 一般 一般

SPA单页面与MPA多页面应用方式各有优缺点,根据自己的项目需要选择更适合自己项目的开发方式(现在主流的是SPA应用)。

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。

二 准备工作

1 安装

npm install vue-router@3.6.5 --save

这个地方需要注意的是你的Vue版本要与vue-router版本对应上,否则安装上也无法使用
vue2.x对应的vue-router版本是 vue-router3.x
vue3.x对应的vue-router版本是 vue-router4.x
2 引入-注册-创建路由

import Router from ‘vue-router’ // 引入
Vue.use(Router) // 注册
new Router({})// 创建路由

对于一个项目来说,路由与组件映射不可能只有一两个。
当路由非常多时,将路由配置直接写在main.js中显然不太好维护,这里我直接建一个文件来进行路由封装router.js

import Vue from 'vue'
import Router from 'vue-router'
// 引入组件
import helloWord from '../views/HelloWord'
import School from '../views/School'

Vue.use(Router)
// 路由与组件绑定
export default new Router({
   
    routes: [ {
   
        name:'school',
        path: '/school',
        component: School
    },{
   
        name:'hellword',
        path: '/helloWord',
        component: helloWord,
    }]
})

3 全局引入路由
在main.js中全局引入

import router from './router'
new Vue({
   
  el: '#app',
  router, // 引入路由
  render: h => h(App),
  beforeCreate(){
   
    // 全局事件总线
    Vue.prototype.$bus = this
  }
}).$mount('#app')

以上全部的准备工作已完成

若以上操作都没有问题,可以在控制台打印vur-router提供的方法$ router、$ route。打印成功就可以使用路由了

$route 每个组件自己的路由信息
$router 全局都一样,是路由的共用方法

在这里插入图片描述

三 路由基本方法

3.1 声明式导航与编程式导航

声明式路由导航
声明式导航是通过在模板中使用特定的指令来实现页面导航。在Vue模板中,使用< router-link>组件来创建导航链接,通过设置to属性指定目标路由的路径或命名路由。例如:

<router-link to="/search">跳转到搜索页面</router-link>

优点:简单直观,通过在模板中编写导航链接,不需要编写额外的Js代码。
编程式导航
编程式导航是通过在Js代码中使用Vue Router提供的API来实现页面导航。通过访问$router对象,可以使用其提供的方法进行页面跳转,例如push、replace、go等。例如:

this.$router.push('/search');

优点:可以在Js代码中根据条件或动态数据进行导航,更加灵活和可控。

1 声明式导航

router-link
配置 to 属性指定路径(必须) 。本质还是a 标签,to 无需 #
to后面可以是path或name

// to path,默认类似 $router.push 跳转路由并增加一条路由历史记录
<router-link class="link" to="/helloWord">Helloword</router-link>
// to name
<router-link class="link" to="helloword">Helloword</router-link>
// 替换当前历史记录,跳转到指定路由
<router-link class="link" replace to="helloword">Helloword</router-link>

2 编程式导航

$router.push
跳转到指定路由,并在路由信息中增加一条历史信息

<button class="link" @click="jump(1)">hellword</button>
jump(type) {
   
      console.log('type', type)
      if (type == 1) {
   
        // path 方法跳转
        // this.$router.push('/helloWord')
        // this.$router.push({path:'/helloWord'})
        // name 方法跳转
        this.$router.push({
   name:'hellword'})
      } else {
   
        this.$router.push('/school')
      }
}

$router.replace
替换当前历史记录,跳转到指定路由

<button class="link" @click="jump(1)">hellword</button>
jump(type) {
   
      console.log('type', type)
      if (type == 1) {
   
         this.$router.replace({
   name:'hellword'})
      } else {
   
        this.$router.push('/school')
      }
}

$router.go()
可以在浏览历史中前进和后退(正数- 前进,0 - 刷新,负数 - 后退)

this.$router.go(0) // 刷新
this.$router.go(-1)  // 后退1

$ router.back()
在历史记录中,后退到上一个页面
$ router.forward()
在历史记录中,前进到下一个页面

完整代码

<template>
  <div id="app">
    <hr />
    <div class="flex">
      <div class="nav">
        <h1>方式一</h1>
        <router-link class="link" to="/helloWord">Helloword</router-link>
        <router-link class="link" to="/school">school</router-link>
        <h1>方式二

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vantUI upload 上传组件v-model绑定问题

直接绑定一个数组会有问题,删除失效/上传不了等等 解决在v-model绑定的数组外包一个对象即可

无人机捕获的视频跟踪UAV123数据集(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 摘要&a…

elementplus el-table(行列互换)转置

Element Plus v2.4.0, repl v3.4.0 <template> <div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label"名字" width"180" /><el-table-column prop"wei…

Spring Boot 快速入门4 ——JSR-303 数据校验

目录 一、前言 二、JSR303 简介 三、使用方法 常用注解 Validated、Valid区别 四、编写测试代码&#xff1a; 1. 实体类添加校验 2. 统一返回类型 3. 测试类 4.我们把异常返回给页面 5.抽离全局异常处理 2. 书写ExceptionControllerAdvice 一、前言 我们在日常开发…

SpringMVC系列二: 请求方式介绍

RequestMapping &#x1f49e;基本使用&#x1f49e;RequestMapping注解其它使用方式可以修饰类和方法可以指定请求方式可以指定params和headers支持简单表达式支持Ant 风格资源地址配合PathVariable 映射 URL 绑定的占位符注意事项和使用细节课后作业 上一讲, 我们学习的是Spr…

《昇思25天学习打卡营第1天|onereal》

昇思25天学习打卡营第1天;有点一头雾水的感觉&#xff0c;说是要在jupyter中签到打卡&#xff0c;是不是就是复制粘贴。我以为是要在终端机器中运行代码呢。 如果只是粘贴代码&#xff0c;那未免太简单了。 我还是想运行这个算力机器&#xff0c;但是他们说每次只能2小时。太…

中国4个民族群体的全基因组DNA甲基化变异图谱首次发布

2023年4月&#xff0c;由西北工业大学联合复旦大学等院校在Science China Life Sciences上发表题为“Genome-wide DNA methylation landscape of four Chinese populations and epigenetic variation linked to Tibetan high altitude adaptation”的文章&#xff0c;该研究通过…

Qt 信号与槽的使用详解 - 多种绑定形式、同步异步、Lambda表达式等

Qt 信号与槽的使用详解 - 多种绑定形式、同步异步、Lambda表达式等 引言一、信号与槽常见的绑定形式二、信号与槽的连接方式 - 同步异步 引言 在Qt框架中&#xff0c;信号与槽&#xff08;Signals and Slots&#xff09;机制是一种强大的通信方式&#xff0c;它允许对象之间进…

讲座学习截图——《CAD/CAE/CAM几何引擎-软件概述》(一)

目录 引出CAD/CAE/CAM几何引擎-软件概述 郝建兵CADCAECAM 几何模型内核ACIS 两个老大之一Open CascadeParasolid 两个老大之一Autodesk的内核 总结其他自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式…

贝锐花生壳内网穿透

贝锐花生壳内网穿透使用步骤 首先你得去官网购买一个域名配置一下内网穿透映射官网下载一个客户端修改代码配置 首先你得去官网购买一个域名 配置一下内网穿透映射 官网下载一个客户端 注意&#xff0c;一定要下载客户端&#xff0c;不然用不了 当然&#xff0c;本地我已经提前…

小程序中用font-spider压缩字体后,字体没效果(解决办法)

因为项目中需要引入外部字体&#xff0c;有两种方案&#xff0c; 第一是把字体下载到本地&#xff0c; 第二种是cdn请求服务器放字体的地址 但是小程序是有大小限制的&#xff0c;所以必须要压缩字体大小&#xff0c;这时候有些人就说了&#xff0c;那把字体放在服务器上&a…

日常-----最爱的人

今日话题 大家好嗷&#xff0c;今天聊的技术可比之前的重要的多啊&#xff0c;哼哼&#xff0c;也不是今天&#xff0c;大家像我看齐嗷&#xff0c;我宣布个事情&#xff01;&#xff01;&#xff01; 于2024年6月21日晚上&#xff0c;本人遇到了这一生最爱的人 嘿嘿 这种事…

一、Vue 世界初探

我们既然使用idea,当然需要一些配置&#xff0c;不使用idea 的可以忽略。 1、我们打开settings 下载vue.js 插件&#xff0c;然后重启。打开我们创建的项目zlflovemmVue 2、配置js 版本 ECMAScript6 3、HTML 增加 .vue 支持 4、启动项目&#xff0c;在edit Configurations 中增…

【Pandas驯化-15】Pandas中几个特征工程函get_dummies、factorize、diff、rank技巧

【Pandas驯化-15】Pandas中几个特征工程函get_dummies、factorize、diff、rank技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内…

JAVA SDK 整合 AI 大语言模型

目前主流模型厂商的 SDK 并没有很好的支持 JAVA 环境&#xff0c;主流还是使用的 Python &#xff0c;如果希望将 AI 功能集成到业务中来&#xff0c;则需要找找有没有一些现成的开源项目&#xff0c;但是这种项目一般需要谨慎使用&#xff0c;以防有偷取 app_key 等风险问题 前…

python爬虫必须要高匿IP吗 ?

各个平台搜索关键词就可以找到不同品牌的代理IP了。 找倒是不难&#xff0c;难的是能从中挑选出靠谱且合适的代理品牌。 在选择代理IP这块&#xff0c;不建议使用免费和超低价的代理&#xff0c;因为这一类的代理往往非常不稳定&#xff0c;很多都被网站拉黑过&#xff0c;特…

比较(四)利用python绘制平行坐标图

比较&#xff08;四&#xff09;利用python绘制平行坐标图 平行坐标图&#xff08;Parallel coordinate plot&#xff09;简介 平行坐标图可以显示多变量的数值数据&#xff0c;最适合用来同一时间比较许多变量&#xff0c;并表示它们之间的关系。缺点也很明显&#xff0c; 不…

Pandas中将列类型从字符串转换为日期时间格式

在Pandas中处理数据时&#xff0c;遇到时间序列数据并不罕见&#xff0c;我们知道Pandas是在python中处理时间序列数据的非常有用的工具。 让我们看看如何将字符串的字符串列&#xff08;dd/mm/yyyy格式&#xff09;转换为datetime格式。如果日期的格式不正确&#xff0c;我们…

分享:Khoj:你的全能AI助手

在数字化时代&#xff0c;我们每天都会面对海量的信息&#xff0c;如何高效地管理和检索这些信息&#xff0c;同时提升工作效率&#xff0c;成为了许多人关注的焦点。为此&#xff0c;Khoj应运而生——一个功能强大、灵活多变的个人化AI助手&#xff0c;旨在助力用户轻松驾驭信…

AI绘画Stable Diffussion 实操教程: 真人图片秒变动漫风,亲手绘制你的专属动漫头像

大家好&#xff0c;我是向阳 你是否曾幻想过自己置身于动漫世界&#xff0c;拥有那些令人羡慕的二次元特征&#xff1f;随着人工智能技术的飞速发展&#xff0c;这一幻想已不再遥不可及。在本文中&#xff0c;我们将一起揭开Stable Diffusion技术的神秘面纱&#xff0c;探索如…