【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:{}
})

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

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

相关文章

​LeetCode解法汇总2476. 二叉搜索树最近节点查询

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; GitHub - September26/java-algorithms: 算法题汇总&#xff0c;包含牛客&#xff0c;leetCode&#xff0c;lintCode等网站题目的解法和代码&#xff0c;以及完整的mode类&#…

企业数字化转型的第一步:由被动多云向主动多云转变

随着经济环境、市场形势、技术发展、用户需求等诸多因素的变化&#xff0c;数字化转型为企业进一步提升效率和竞争力、提供更加丰富的个性化产品和服务、进行业务场景创新、探寻新的增长机会和运营模式提供了崭新的途径。越来越多的企业意识到&#xff0c;数字化转型已不是企业…

[UUCTF 2022 新生赛]ez_rce

这个题目是很简单的&#xff0c;有很多中解法&#xff0c;我来说几种&#xff0c;大家可以参考一下 1.有一个命令是l\s等于ls&#xff0c;但是我尝试codel\s结果还是被过滤了&#xff0c;于是使用printf命令包含l\s&#xff0c;加上反引号就是先执行反引号里的内容&#xff0c…

UE5 UE4 不同关卡使用Sequence动画

参考自&#xff1a;关于Datasmith导入流程 | 虚幻引擎文档 (unrealengine.com) 关卡中的Sequence动画序列&#xff0c;包含特定关卡中的Actor的引用。 将同一个Sequcen动画资源放入其他关卡&#xff0c;Sequence无法在新关卡中找到相同的Actor&#xff0c;导致报错。 Sequen…

我写了个ImageWindow应用

文章目录 0 引言1 应用简介2 主要功能和特点2.1 多图像同/异步像素级对比2.2 支持多达30种图像格式2.3 高效率的图像处理性能 3 简明使用教程3.1 软件下载安装与更新3.1.1 软件下载与安装3.1.2 软件更新 3.2 多视窗添加并自动最优排列3.3 多样化图像导入方式3.4 自动切换显示模…

综合练习(一)

目录 列出薪金高于部门 30 的所有员工薪金的员工姓名和薪金、部门名称、部门人数 列出与 ALLEN从事相同工作的所有员工及他们的部门名称、部门人数、领导姓名 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 列出薪金高于部门 30 的所…

嵌入式学习第二十三天!(进程间通信)

进程间的通信&#xff1a; 1. 管道 2. 信号 3. 消息队列 4. 共享内存 5. 信号灯 6. 套接字 1. 管道&#xff1a; 1. 无名管道 无名管道只能用于具有亲缘关系的进程间通信 原因&#xff1a;无名管道没有名字&#xff0c;所有找不到管道的具体位置&#xff0c;那么在创建子进程前…

蓝牙耳机和笔记本电脑配对连接上了,播放设备里没有显示蓝牙耳机这个设备,选不了输出设备

环境&#xff1a; WIN10 杂牌蓝牙耳机6s 问题描述&#xff1a; 蓝牙耳机和笔记本电脑配对连接上了&#xff0c;播放设备里没有显示蓝牙耳机这个设备&#xff0c;选不了输出设备 解决方案&#xff1a; 1.打开设备和打印机&#xff0c;找到这个设备 2.选中这个设备&#…

Tomcat源码解析(二): Bootstrap和Catalina

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a; Tomcat整体架构 Tomcat源码解析(二)&#xff1a; Bootstrap和Catalina 目录 一、基础组件1、Lifecycle生命周期顶级接口2、组件的默认实现 二、启动类Bootstrap1、main2、init3、load与start 三、加载Catalina1、load2、s…

xss过waf的小姿势

今天看大佬的视频学到了几个操作 首先是拆分发可以用self将被过滤的函数进行拆分 如下图我用self将alert拆分成两段依然成功执行 然后学习另一种姿势 <svg id"YWxlcnQoIlhTUyIp"><img src1 οnerrοr"window[eval](atob(document.getElementsByTagNa…

深入理解Java泛型及其在实际编程中的应用

第1章&#xff1a;泛型的起源与重要性 大家好&#xff0c;我是小黑&#xff0c;在Java里&#xff0c;泛型&#xff08;Generics&#xff09;是一种不可或缺的特性&#xff0c;它允许咱们在编码时使用类型&#xff08;Type&#xff09;作为参数。这听起来可能有点绕&#xff0c…

单细胞Seurat - 细胞聚类(3)

本系列持续更新Seurat单细胞分析教程&#xff0c;欢迎关注&#xff01; 维度确定 为了克服 scRNA-seq 数据的任何单个特征中广泛的技术噪音&#xff0c;Seurat 根据 PCA 分数对细胞进行聚类&#xff0c;每个 PC 本质上代表一个“元特征”&#xff0c;它结合了相关特征集的信息。…