【Vue】路由

news/发布时间2024/9/20 5:39:42

       📝个人主页:五敷有你      

 🔥系列专栏: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:{}
})

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

二叉树(1)

目录 1. 树型结构 1.1 概念 1.2 概念 1.3 树的表示形式 ​编辑 2. 二叉树 2.1 概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.5 二叉树的基本操作 2.5.1 前置说明 2.5.2 二叉树的遍历 1. NLR&#xff1a;前序遍历(亦称先序遍历): 2. LNR&#xff1a;中序遍历…

Unity中URP实现水体(整理优化)

文章目录 前言一、优化水的深度1、我们把 水流动的方向 和 水深浅过渡值&#xff0c;整合到一个四维变量中2、修改 水体流动方向3、在片元着色器中&#xff0c;修改使用过渡变量 二、优化泡沫三、优化水下的扭曲1、修复原本扰动UV的计算 四、优化水面高光1、把高光强度、光滑度…

Leetcoder Day29| 贪心算法part03

1005.K次取反后最大化的数组和 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次。&#xff08;我们可以多次选择同一个索引 i。&#xff09; 以这种方式修改数组后&a…

基于springboot+vue的街球社区网站(源码+论文)

文章目录 前言 一、功能设计 二、功能实现 系统首页设计 系统前台基本功能设计与实现 ​编辑 系统后台管理功能设计与实现 三、库表设计 四、论文 前言 本文主要讲述了基于SpringBootVue模式的街球社区网站的设计与实现。这里所谓的街球社区网站是通过类似于百度贴吧之类的网上…

大数据开发项目--音乐排行榜

环境&#xff1a;windows10&#xff0c;centos7.9&#xff0c;hadoop3.2、hbase2.5.3和zookeeper3.8完全分布式&#xff1b; 环境搭建具体操作请参考以下文章&#xff1a; CentOS7 Hadoop3.X完全分布式环境搭建 Hadoop3.x完全分布式环境搭建Zookeeper和Hbase 1. 集成MapReduce…

【设计模式】5种创建型模式详解

创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性。 常用的有&#xff1a;单例模式、工厂模式&#xff08;工厂方法和抽象工厂&#xff09;、建造者模式。不常用的有&#xff1a;原型模式。 一、单例模式 1.1 单例模式介绍 1 ) 定义 单例模式&#xff08;Si…

Docker实战

目录 docker简介docker体系架构与基本概念安装docker使用APT方式安装Docker使用二进制文件方式安装&#xff08;可自行尝试&#xff09; Docker镜像什么是Docker镜像使用 Docker 默认的镜像存储路径自定义 Docker 的镜像存储路径&#xff08;不推荐&#xff0c;故不做演示&…

git之分支管理

一.理解分支 我们看下面这张图片&#xff1a; 在版本回退⾥&#xff0c;你已经知道&#xff0c;每次提交&#xff0c;Git都把它们串成⼀条时间线&#xff0c;这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前&#xff0c;只有⼀条时间线&#xff0c;在Git⾥&#xff0c;这个分⽀…

Leetcode : 215. 数组中的第 K 个最大元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路&#xff1a;最开始排序算法&…

Python多功能课堂点名器、抽签工具

一、问题缘起 去年&#xff0c;ChatGPT浪潮袭来&#xff0c;我懂简单的Python基础语法&#xff0c;又有一些点子&#xff0c;于是借助于人工智能问答工具&#xff0c;一步一步地制作了一个点名器&#xff0c;也可以用于抽签。当时&#xff0c;我已经设计好页面和基础的功能&am…

Windows虚拟主机如何开启网页debug模式

前不久&#xff0c;有客户咨询想要知道如何开启网页debug模式,以便后期他网站出现异常可以自行排查。这边了解到他当前使用的是Hostease 的Windows 虚拟主机&#xff0c;而开启网页debug模式的操作步骤如下&#xff1a; 1.Hostease的Windows虚拟主机都是带Plesk面板的,因此需要…

什么是物联网网关?

随着物联网的发展&#xff0c;企业发现自己面临着集成多种设备和协议的挑战&#xff0c;其中许多设备和协议具有不同的功率和连接要求。这种组合还可能包括遗留技术。物联网网关正在成为构建强大物联网和在边缘计算场景中提供计算能力的重要组成部分。 物联网网关执行哪些功能&…

spring Boot快速入门

快速入门为主主要届介绍java web接口API的编写 java编辑器首选IntelliJ IDEA 官方链接&#xff1a;https://www.jetbrains.com/idea/ IEDA 前言 实例项目主要是web端API接口的使用&#xff0c;项目使用mysql数据库&#xff0c;把从数据库中的数据的查询出来后通过接口json数…

数据结构day4

实现创建单向循环链表、创建结点、判空、输出、头插、按位置插入、尾删、按位置删除 loop_list.c #include "loop_list.h" loop_p create_head() {loop_p L(loop_p)malloc(sizeof(loop_list));if(LNULL){printf("空间申请失败\n");return NULL;}L->le…

网络原理 - HTTP/HTTPS(5)

HTTPS HTTPS也是一个应用层协议.在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的. 这就导致了在传输过程中出现了一些被篡改的情况. 臭名昭著的"运营商劫持" 下载一个天天动听. 未被劫持的效果,点击下载按钮,就会弹出天天动听的…

解决鸿蒙模拟器卡顿的问题

缘起 最近在学习鸿蒙的时候&#xff0c;发现模拟器非常卡&#xff0c;不要说体验到鸿蒙的丝滑&#xff0c;甚至到严重影响使用的程度。 根据我开发Android的经验和在论坛翻了一圈&#xff0c;最终总结出了以下几个方案。 创建模拟器 1、在DevEco Virtual Device Configurat…

JOISC2022 复制粘贴(区间DP,字符串hash)

题目描述 题面 分析 这道题考场没有任何头绪&#xff0c;赛后也是看了许多题解才明白状态设计和转移的一步步思考过程。 首先我们需要想到 无论是屏幕上的字符串&#xff0c;还是剪切板上的字符串&#xff0c;在任何时候都必须是目标串的子串。这个非常好像&#xff0c;如果不…

自动驾驶消息传输机制-LCM

需要用到LCM消息通讯&#xff0c;遂研究下。 这里写目录标题 1 LCM简介2. LCM源码分析3 LCM C教程与实例3.1 安装配置及介绍3.2 创建类型定义3.3 初始化LCM3.4 发布publish一个消息3.5 订阅和接收一个消息3.6 LCM进程间通讯3.7 注意事项&#xff1f;3.7.1 当数据结构定义的是数…

期货开户保证金保障市场正常运转

期货保证金是什么&#xff1f;在期货市场上&#xff0c;采取保证金交易制度&#xff0c;投资者只需按期货合约的价值&#xff0c;交一定比率少量资金即可参与期货合约买卖交易&#xff0c;这种资金就是期货保证金。期货保证金&#xff08;以下简称保证金〕按性质与作用的不同。…

php基础学习之错误处理(其二)

在实际应用中&#xff0c;开发者当然不希望把自己开发的程序的错误暴露给用户&#xff0c;一方面会动摇客户对己方的信心&#xff0c;另一方面容易被攻击者抓住漏洞实施攻击&#xff0c;同时开发者本身需要及时收集错误&#xff0c;因此需要合理的设置错误显示与记录错误日志 一…
推荐文章