vue-路由(六)

阅读文章你可以收获什么?

1 明白什么是单页应用

2 知道vue中的路由是什么

3 知道如何使用vueRouter这个路由插件

4 知道如何如何封装路由组件

5 知道vue中的声明式导航router-link的用法

6 知道vue中的编程式导航的使用

7 知道声明式导航和编程式导航式如何传递参数的?


单页应用程序-Single Page Applicatio

什么是单页应用程序?

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

具体示例: 网易云音乐 https://music.163.com/

单页应用程序与多页应用的对比

单页面应用:系统类网站 / 内部网站 / 文档类网站 /移动端站点

多页应用:公司官网 / 电商类网站

路由概念

为什么需要路由

单页面应用程序,之所以开发效率高,性能高,用户体验

最大的原因就是:页面按需更新

要按需更新,首先就需要明确:访问路径 和 组件的对应关系!

访问路径 和 组件的对应关系如何确定呢? 路由 

路由的介绍(要点概念)

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

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

 如何在vue中使用路由呢?这就需要使用到一个已经封装好的组件VueRouter来实现了

V

VueRouter入门 (路由)

VueRouter 的 介绍

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

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

官网:https://v3.router.vuejs.org/zh/

小知识:

vue2 3 3         解析:vue2使用的路由版本是3开头的,使用的vuex(数据存储仓库)也是3开头的

vue3  4 4        解析:vue3使用的路由版本是4开头的,使用的vuex也是4开头的

VueRouter 的 使用 (5 + 2)

5个基础步骤 (固定)

① 下载: 下载 VueRouter 模块到当前工程,版本3.6.5

npm i vue-router@3.6.5

② 引入

 import VueRouter from 'vue-router'

 ③ 安装注册

Vue.use(VueRouter)

④ 创建路由对象

const router = new VueRouter()

⑤ 注入,将路由对象注入到new Vue实例中,建立 关联

 2 个核心步骤

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

② 配置导航,配置路由出口(路径匹配的组件显示的位 置) 

 小结:到这里就完成了路由的基本使用了,但在日常开发中我们一般都会将路由封装起来使用,这样便于管理,后面会详解讲解

1   声明一个index.js文件,里面写了导入路由的相关代码

import Vue from 'vue'
import VueRouter from "vue-router";
import Layout from '@/views/Layout'
import ArticleDetail from '@/views/ArticleDetail'
import Article from '@/views/Article'
import Like from '@/views/Like'
import User from '@/views/User'
import Collect from '@/views/Collect'
Vue.use(VueRouter)const router = new VueRouter({routes: [// 一级路由{path: '/' ,component: Layout,redirect: '/article',// 二级路由children: [{path: '/article' ,component: Article},{path: '/like' ,component: Like},{path: '/user' ,component: User},{path: '/collect' ,component: Collect},]},{path: '/detail' ,component: ArticleDetail}]
})export default router

2 将封装的路由注册到mian.js的全局的Vue中

import Vue from 'vue'
import App from './App.vue'
import router from './router'Vue.config.productionTip = falsenew Vue({render: h => h(App),router
}).$mount('#app')

组件目录存放问题

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

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

 

组件分类: .vue文件分2类; 页面组件 & 复用组件         注意:都是 .vue文件 

为什么放在 views 目录呢? 

分类开来 更易维护

  • src/views文件夹

        页面组件 - 页面展示 - 配合路由

  • src/components文件夹

        复用组件 - 展示数据

路由进阶(重点)

① 路由模块封装

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

显示这里不合适的,为了利于后期的维护,我们需要将路由模块封装起来使用

② 声明式导航 (router-link

声明式导航 - 导航链接

需求:实现导航高亮效果

 思考:像图中标签的高亮效果如何实现呢?

显然,像图中的高亮效果,我们以前在学习js时就经常遇见过,使用传统的js的代码也可以实现,但在vue有一种更好的方式去实现它

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

① 能跳转,配置 to 属性指定路径(必须) 。本质还是 a 标签 ,to 无需#

② 能高亮,默认就会提供高亮类名,可以直接设置高亮样式

 导航高亮

为什么这个router-link可以实现高亮呢?

查看代码:我们发现 router-link 自动给当前导航添加了 两个高亮类名

 精确匹配&模糊匹配

 自定义高亮类名

router-link 的 两个高亮类名 太长了,我们希望能定制怎么办?

声明式导航传参 

1. 查询参数传参

        ① 语法格式如

                to="/path?参数名=值"

        ② 对应页面组件接收传递过来的

                $route.query.参数名

2. 动态路由传参 

        ① 配置动态

        

        ② 配置导航链接 

                to="/path/参数值"

        ③ 对应页面组件接收传递过来的

                $route.params.参数名

两种传参方式的区别 

动态路由参数可选符 

问题:配了路由 path: "/search/:words" 为什么按下面步骤操作,会未匹配到组件,显示空白?

原因: /search/:words 表示,必须要传参数。如果不传参数,也希望匹配,可以加个可选符 "?

③ 路由重定向 / 路由404 / 路由模式

路由重定向(redirect)

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

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

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

 路由404

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

位置:配在路由最后

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

效果 

 路由模式

问题: 路由的路径看起来不自然, 有#,能否切成真正路径形式?

  • hash路由(默认) 例如: http://localhost:8080/#/home
  • history路由(常用) 例如: http://localhost:8080/home (以后上线需要服务器端支持)

④ 编程式导航

编程式导航 - 基本跳转

场景:点击按钮跳转如何实现?

编程式导航:用JS代码来进行跳转

两种语法:

① path 路径跳转

② name 命名路由跳转

① path 路径跳转 (简易方便)

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

 编程式导航 - 路由传参

两种传参方式:查询参数 + 动态路由传参

两种跳转方式,对于两种传参方式都支持:

① path 路径跳转传参

② name 命名路由跳转传参

① path 路径跳转传参

query传参

 接收:

动态路由传参

② name 命名路由跳转传参

query传参

接收:

动态路由传参 

小结:

1. path 路径跳转

2. name 命名路由跳转 

案例:面经基础版 

 组件缓存 keep-alive

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

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

相关文章

Java实现新能源电池回收系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

BUGKU-WEB source

题目描述 题目截图如下: 进入场景看看: 解题思路 看源码,看F12网络请求没有东西只能老老实实按照提示用Linux去扫描目录 相关工具 kali虚拟机安装gobuster 或者dirsearch 解题步骤 先查看源码: flag{Zmxhz19ub3RfaGvyzS…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…

机器学习面试:逻辑回归与朴素贝叶斯区别

逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型&#xff0c;朴素贝叶斯是生成模型&#xff0c;所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯&#xff0c;逻辑回归是最大似然&#xff0c;两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…

[java基础揉碎]方法的调用机制 方法使用的细节 方法的递归调用 方法的可变参数​

目录 方法的调用机制 方法使用的细节 方法的递归调用 方法的可变参数​编辑​编辑 方法的调用机制 方法使用的细节 访问修饰符&#xff08;作用是控制方法使用的范围&#xff09; 如果不写默认访问&#xff0c;[有四种&#xff1a;public,protected,默认&#xff0c;priv…

FLUENT Meshing Watertight Geometry工作流入门 - 8 添加边界层网格

本视频中学到的内容&#xff1a; 如何使用 “添加边界层”任务生成边界层网格边界层网格在流体动力学中的重要性可用于添加边界层网格的方法以及所需的用户输入 视频链接&#xff1a; FLUENT Meshing入门教程-8添加边界层网格_哔哩哔哩_bilibili 流体动力学中边界层的概念及…

JAVA面试题并发篇

1. 线程状态 要求 掌握 Java 线程六种状态 掌握 Java 线程状态转换 能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法…

通过Linux终端搭建基于HTTP隧道的文件传输系统

嘿&#xff0c;Linux小侠们&#xff0c;准备好挑战一项酷炫的任务了吗&#xff1f;今天我们要一起通过Linux终端搭建一个基于HTTP隧道的文件传输系统&#xff0c;让我们的文件在网络的海洋中畅游无阻&#xff01; 在开始之前&#xff0c;让我们先来想象一下这个场景&#xff1…

安卓和Android是两种不同的操作系统?

实际上&#xff0c;安卓和Android并不是同一种操作系统&#xff01; Android是由Google开发并维护更新的一款操作系统&#xff0c;目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机&#xff1a;哪个更好&#xff1f;Google Pixel 与 Apple iPhone哪个手机才是性价比最…

不同品牌和种类的电容与电感实测对比(D值、Q值、ESR、X)

最近买了个LCR电桥&#xff0c;就想测一下手头上的各种电容电感的参数&#xff0c;对比一下。 测试设备是中创ET4410&#xff0c;测量的参数有&#xff1a;电容值、电感值、D(损耗角正切值)、Q(品质因数)、ESR(等效串联电阻)、X(电抗&#xff0c;通常表示为感抗XL或容抗XC)。 …

系统集成商如何成功集成 MDR

安全系统集成商在为各行业组织设计、安装和维护复杂的安全解决方案方面发挥着关键作用。 在运营技术(OT) 中&#xff0c;物理和数字环境比以往任何时候都更加交织在一起&#xff0c;需要额外保持警惕来检查威胁检测和响应。随着网络威胁日益丰富和复杂&#xff0c;许多客户现在…

详解 leetcode_078. 合并K个升序链表.小顶堆实现

/*** 构造单链表节点*/ class ListNode{int value;//节点值ListNode next;//指向后继节点的引用public ListNode(){}public ListNode(int value){this.valuevalue;}public ListNode(int value,ListNode next){this.valuevalue;this.nextnext;} }package com.ag; import java.ut…