【Vue】路由

       📝个人主页:五敷有你      

 🔥系列专栏:Vue

⛺️稳中求进,晒太阳

目录

路由

单页应用程序

        总结:

VueRouter

核心步骤:

组件存放目录的问题

路由的封装

声明式导航

声明式导航 - 导航链接

声明式导航 - 两个类名

声明式导航-跳转传参

查询参数传参

动态路由传参

Vue路由的-重定向

Vue路由-404

Vue路由-模式设置

编程式导航 - 基本跳转


路由

单页应用程序

单页面应用:(SPA):所有功能在 一个html页面上 实现

开发分类

实现方式

页面性能

开发效率

用户体验

学习成本

首屏加载

SEO

单页

一个html

按需更新

性能高

非常好

多页

多个html页面

整页更新

性能低

中等

一般

中等

  • 单页面应用: 系统网站,内部网站,文档网站,移动端站点
    • 具体实例:网易云
  • 多页面应用: 公司官网,电商类网站
总结:
  • 单页面应用程序之所以开发效率高,性能高,用户体验好 最大原因就是:页面按需更新
  • 按需更新,首先需要明确: 访问路径和组件的对应关系---路由

生活中的路由:设备和ip的映射关系

Vue中的路由: 路径和组件的映射关系

VueRouter

作用:修改地址栏路径时,切换显示匹配的组件

说明:Vue官方的一个路由插件,是一个第三方包

使用步骤:(写在main.js)

        1. 下载:下载VueRouter 模板到当前工程 版本3.6.5

yarn add vue-router@3.6.5
npm i vue-router@3.6.5

        2. 引入

import VueRouter from 'vue-router'

         3 .安装注册

Vue.use(VueRouter)

        4. 创建路由对象

const router=new VueRouter()

        5.注入,将路由对象注入到newVue实例中,建立关联

new Vue({
    render:h=>h(App),
    router:router
}).$mount('#app')

核心步骤:

        1.创建需要的组件(views目录),配置路由规则

import Find from './views/Find.vue'
import Find from './views/Find.vue'
import Find from './views/Find.vue'

const router=new VueRouter({
    routes:[
        {path:"/find",component:Find},    
        {path:"/find",component:Find},    
        {path:"/find",component:Find},    
    ]
})

        2.配置导航,配置路由出口(路径匹配的组件的位置)

                <router-view></router-view>确定显示的位置

<div class="footer_warp">
    <a href="#/find">发现音乐</a>
    <a href="#/my">我的音乐</a>
    <a href="#/friend">朋友</a>
</div>
<div>
    <router-view></router-view>
</div>

组件存放目录的问题

注意:.vue文件 本质无区别

路由相关的组件,为什么放在views目录呢?

组件分类

  • 页面组件 - 页面展示 - 配合路由用 -view层
  • 复用组件 - 展示数据 - 常用于复用 -components层

路由的封装

问题:所有的路由都堆在main.js中合适么?

目标:将所有的模块抽离出来

好处:拆分模块

封装到router/index.js下

import myMusic from '@/components/myMusic.vue'
import myFriends from '@/components/myFriends.vue'
import findMusic from '@/components/findMusic.vue'
import Vue from 'vue'
import VueRouter from 'vue-router'
<!--VueRouter组件的初始化-->
Vue.use(VueRouter)
<!--创建一个路由对象-->
const router=new VueRouter({
  routes:[
      //router 路由规则
      //route 一条路由规则{path:"路径",component:组件名}
  {path:"/my",component:myMusic},
  {path:"/find",component:findMusic},
  {path:"/friend",component:myFriends},
  ]
})

<--导出路由-->
export default router;

之后再在main.js中导入

import router from './router/index'

声明式导航

声明式导航 - 导航链接

vue-router提供了一个全局组件router-link(取代a标签)

  1. 能跳转:配置to属性指定路径(必须),本质还是a标签,to无需#
   <router-link to="find">发现音乐</router-link>
      <router-link to="friend">我的朋友</router-link>
      <router-link to="my">我的音乐</router-link>
  1. 能高亮:默认就会提高高亮类名,可以直接设置高亮样式
    1. 有.router-link-active
    2. 有。router-link-exact-active
   <router-link to="find" class="router-link-exact-active  router-link-active">发现音乐</router-link>
      <router-link to="friend">我的朋友</router-link>
      <router-link to="my">我的音乐</router-link>

声明式导航 - 两个类名

router-link自动给当前导航添加了两个高亮类名

1.router-link-active 模糊匹配(用的多)

                to="/my" 可以匹配 /my /my/a /my

2.router-link-exact-active 精确匹配

                to="/my" 仅可以匹配 /my

 

声明式导航-跳转传参

目标:在跳转的路由的时候传参

  1. 查询参数传参
    1. 语法格式如下
      1. to="/to"?参数名=值"
 <div class="nav">
      <router-link to="find?key=发现音乐">发现音乐</router-link>
      <router-link to="friend?key=我的朋友">我的朋友</router-link>
      <router-link to="my?key=我的音乐">我的音乐</router-link>
    </div>

  1. 对应页面组件接受传递过来的值
    1. $route.query.参数名.
<template>
    <div class="main">
        <h1>{{ $route.query.key }}</h1>
        <p>朋友的音乐</p>
        <p>朋友的音乐</p>
        <p>朋友的音乐</p>
        <p>朋友的音乐</p>
    </div>
</template>
动态路由传参
  1. 配置动态路由
    1. {path:"/my/:word",component:myMusic},
const router=new VueRouter({
  routes:[
  {path:"/my/:word",component:myMusic},
  {path:"/find/:word",component:findMusic},
  {path:"/friend/:word",component:myFriends},
  ]
})

       2. 配置导航链接

            to="path/参数值"

<router-link to="/my/我的音乐">我的音乐</router-link>

         3.对应页面组件接受传递过来的值

                $route.params.参数名

  <h1>{{ $route.params.word }}</h1>

Vue路由的-重定向

问题:网页打开,url默认时是/路径,未匹配到组件时,会出现空白

说明:重定向 →匹配path后,强制跳转path路径

语法:{path:匹配路径,redirect:重定向的路径},

const router=new VueRouter({
  routes:[
    {path:"/",redirect:"/find/爱你"},
  {path:"/my/:words",component:myMusic},
  {path:"/find/:words",component:findMusic},
  {path:"/friend/:words",component:myFriends},
  ]
})

Vue路由-404

作用:当路径找不到匹配时,给个提示页面

位置:配置路由的最后

语法:path:"*"(任意路径)-前面不匹配就命中最后一个

const router=new VueRouter({
  routes:[
    {path:"/",redirect:"/find/爱你"},
  {path:"/my/:words",component:myMusic},
  {path:"/find/:words",component:findMusic},
  {path:"/friend/:words",component:myFriends},
  {path:"*",component:NotFind},
  ]
})

Vue路由-模式设置

问题:路由的路径带有#,能否真正切成路径形式

hash路由(默认) 例如: http://localhost:8080/#/home

history路由(常用) 例如: http://localhost:8080/home

 在index.js中

const router=new VueRouter({
  mode:"history",
  routes:[
  
    {path:"/",redirect:"/find/爱你"},
  {path:"/my/:words",component:myMusic},
  {path:"/find/:words",component:findMusic},
  {path:"/friend/:words",component:myFriends},
  {path:"*",component:NotFind},
  ]
})

编程式导航 - 基本跳转

问题:点击按钮怎么跳转

编程式导航,用js代码跳转

两种语法:

  1. path 路径跳转
简单写法:
this.$router.push("/路由路径")
复杂写法:
this.$router.push({
    path:'/路由路径',
})

query传参

简写:
this.$router.push('/路径?参数1=值,参数2=值,参数3=值')

完整写法:
this.$router.push({
    path:"/路径",
    query:{
        参数名1:"值",
        参数名2:"值"
    }
})
对应取值
  <h1>{{ $route.query.key }}</h1>

动态传参

简写:
this.$router.push("/路径/${this.inpValue}")
完整写法:
this.$router.push({
    path:"路径/关键词"
})

//取值
this.$route.param.words

name 命名路由跳转(适合path路径长的场景)

{name:'路由名',path:'/path/xxx',component:xxx}
//query传参
this.$router.push({
    name:"路由名",
    query:{
            
    }
})
//动态路由传参
this.$router.push({
    name:"路由名",
    param:{
            
    }
})

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一款高温型霍尔效应传感器

一、产品概述 HAL443A单极性霍尔位置传感器是由内部电压稳压器、霍尔电压发生器、差分 放大器、温度补偿单 元、施密特触发器和集 电极开路输出级组成的磁敏传感电路&#xff0c;其输入为磁感应强度&#xff0c;输出是一个数字电压 信号。它是一种单磁极工作的磁敏电路&…

【Java程序设计】【C00327】基于Springboot的高校教师教研信息填报系统(有论文)

基于Springboot的高校教师教研信息填报系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的高校教师教研信息填报系统&#xff0c;本系统有管理员、教研管理以及教研人员三种角色&#xff1b; 管理员&#xff1a…

C++设计模式——抽象工厂模式

文章目录 抽象工厂模式的主要组成部分抽象工厂模式的一个典型例子抽象工厂模式用于其他场景抽象工厂模式与其他设计模式结合使用 C 中的抽象工厂模式是一种创建型设计模式&#xff0c;它主要用于处理对象家族的创建&#xff0c;这些对象之间可能存在一定的关联关系或属于相同的…

Vue页面更新后刷新页面不会渲染解决

小编今天犯了个很低级的错误&#xff0c;导致VUE页面刷新样式不会更新的问题&#xff01; 解决方法&#xff1a;查看你的路由路径大小写是否正确&#xff01;小编是犯了这种错误&#xff0c;特此分享下&#xff01;

HarmonyOS—端云一体化组件

概述 DevEco Studio还为您提供多种端云一体化组件。集成端云一体化组件后&#xff0c;您只需进行简单配置即可向应用用户提供登录、支付等众多功能。 登录组件 您可使用端云一体化登录组件向应用用户提供登录和登出功能&#xff0c;目前支持帐号密码登录、手机验证码登录、以…

k8s部署 多master节点负载均衡以及集群高可用

一、k8s 添加多master节点实验 1、master02节点初始化操作 2、在master01节点基础上&#xff0c;完成master02节点部署 ①从master01节点复制所需要的文件 需要从master01节点复制etcd数据库所需要的ssl证书、kubernetes安装目录&#xff08;二进制文件、组件与apiserver通信…

单调栈-算法题

739. 每日温度 题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示…

select * from 表 c=‘1‘ and b=‘2‘ and a=‘3‘; abc是联合索引,这样查询会命中索引吗?

倒叙也会命中索引 但是要注意&#xff0c;倒叙的时候必须要有a存在&#xff0c;否则就会索引失效 因为mysql底层会有优化器去进行优化&#xff0c;但是如果没有a的话&#xff0c;那么优化器就不知道要优化那个索引了&#xff0c;所以他走了全表&#xff0c;导致索引失效

深入理解Linux线程(LWP):概念、结构与实现机制(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;会いたい—Naomile 1:12━━━━━━️&#x1f49f;──────── 4:59 &#x1f504; ◀️ ⏸ ▶️ ☰ &a…

【rust】10 project、crate、mod、pub、use、项目目录层级组织、概念和实战

文章目录 一、项目目录层级组织概念1.1 cargo new 创建同名 的 Project 和 crate1.2 多 crate 的 package1.3 mod 模块1.3.1 创建嵌套 mod1.3.2 mod 树1.3.3 用路径引用 mod1.3.3.1 使用绝对还是相对? 1.3.4 代码可见性1.3.4.1 pub 关键字1.3.4.2 用 super 引用 mod1.3.4.3 用…

内衣洗衣机什么牌子好又便宜?实力非凡机型深度测评

内衣裤这种小件的衣物紧密接触皮肤&#xff0c;更是接触特殊生理部位&#xff0c;所以&#xff0c;内衣裤对卫生标准有着特殊要求&#xff0c;现在很多人都是&#xff0c;把内衣裤放到家里的大型洗衣机和其他衣物混洗&#xff0c;你应该知道大型洗衣机由于长期清洗一些大件的衣…

1.2 debug的六种指令的使用,四个通用寄存器

汇编语言 首先进入环境 mount c d:masm //把c挂载在d盘中的masm当中 c: //进入c&#xff0c;进入到编译环境 dir //查看文件&#xff0c;可有可无Debug是DOS、Windows都提供的实模式&#xff08;8086 方式&#xff09;程序的调试工具。使用它可以查看CPU各种寄存器中的内容…

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…

Go开发 入门以VSCode为例

一、Go环境搭建 1.1 安装 进入Golang官网 https://go.dev&#xff0c;点击 Download 若无法打开网页可以使用国内的Go语言中文网 https://studygolang.com/dl 进入下载 找到合适的平台点击链接下载即可&#xff08;这里以Windows距离&#xff09; 下载完成后 Next Next 安…

rabbitmq重编辑版本

消息队列RabbitMQ详细使用 文章目录 消息队列RabbitMQ详细使用MQ 的相关概念什么是MQ为什么要用MQMQ 的分类MQ 的选择 RabbitMQRabbitMQ 的概念四大核心概念各个名词介绍安装RabbitMQWeb管理界面及授权操作Docker 安装Hello world简单示例 Work Queues轮训分发消息消息应答自动…

【数据分享】2001-2022年我国省市县镇四级的逐日平均降水量数据(免费获取\excel\shp格式)

降水数据是我们在各项研究中最常用的气象指标之一&#xff01;之前我们给大家分享过来源于国家青藏高原科学数据中心发布的1961—2022年全国范围的逐日降水栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是2001-2002年我国省市县镇四个…

基础!!!吴恩达deeplearning.ai:卷积层

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 回顾——密集层 Dense Layer卷积层 Convolutional Neural Network定义优势具体说明心电图卷积层搭建 到目前为止&#xff0c;你使用的所有神经网络层都是密集层类型&#xff0c;这…

瑞_23种设计模式_组合模式

文章目录 1 组合模式&#xff08;Composite Pattern&#xff09;1.1 介绍1.2 概述1.3 组合模式的结构1.4 组合模式的分类1.5 组合模式的优点1.6 组合模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列…

AI大模型-启航

文章目录 什么是大模型&#xff1f;&#xff08;大体现在参数量巨大&#xff09;大模型将会改变那些行业&#xff08;大模型有哪些作用&#xff1f;&#xff09;如何搞数据训练模型&#xff1f;LangChain带来的技术变革LangChain架构 什么是大模型&#xff1f;&#xff08;大体…

网络编程作业day2

1.将TPC和UDP通信模型各敲两遍 &#xff08;1&#xff09;TPC通信模型&#xff1a; 服务器代码&#xff1a; #include <myhead.h> #define SERVER_IP "192.168.125.136" #define SERVER_PORT 1314 int main(int argc, const char *argv[]) {//1、创建用于监…